d
template <typename Func>
void Method(Func func) {}
И ещё использовать forwarding reference, да
Size: a a a
d
template <typename Func>
void Method(Func func) {}
D
template <typename Func, typename Arg>
auto Method(Func func, Arg&& arg) -> decltype(func(std::forward<Arg>(arg))) {
return func(std::forward<Arg>(arg));
}
SH
d
template <typename Func, typename Arg>
auto Method(Func func, Arg&& arg) -> decltype(func(std::forward<Arg>(arg))) {
return func(std::forward<Arg>(arg));
}
SH
SH
SH
D
O
template <typename Func, typename Arg>
auto Method(Func&& func, Arg&& arg)
noexcept(noexcept(std::forward<Func>(func)(std::forward<Arg>(arg))))
-> decltype(std::forward<Func>(func)(std::forward<Arg>(arg)))
{
return std::forward<Func>(func)(std::forward<Arg>(arg));
}
D
template <typename Func, typename Arg>
auto Method(Func&& func, Arg&& arg)
noexcept(noexcept(std::forward<Func>(func)(std::forward<Arg>(arg))))
-> decltype(std::forward<Func>(func)(std::forward<Arg>(arg)))
{
return std::forward<Func>(func)(std::forward<Arg>(arg));
}
d
O
decltype
, как у тебя. Но Func
тоже желательно форвардитьd
SS
o
SH
SH
AB
template <class Ret, class... Args>
Ret Method(Ret (*callback)(Args...), Args&&... args);
В таком коде:int foo(int, char);
Method(foo, 1, '2');
D
d