试图这样:
user
但失败了:
template <class R, class... Ts>
class MyFunction
{
public:
using func_type = R(*)(Ts...);
MyFunction(func_type f)
: m_func(f)
{
}
R operator()(Ts ... args)
{
return m_func(args...);
}
private:
func_type m_func;
};
int Testfn(int a)
{
std::cout << "value is " << a;
return 42;
}
void Testing()
{
MyFunction<int(int)> func(Testfn);
std::cout << "Ret is " << func(1) << std::endl;
}
编译器是MSVC2013。
答案 0 :(得分:4)
应该是这样的:
template <typename T>
class MyFunction;
template<typename R, class... Ts>
class MyFunction<R(Ts...)>
{
public:
using func_type = R(*)(Ts...);
MyFunction(func_type f)
: m_func(f)
{
}
R operator()(Ts ... args)
{
return m_func(args...);
}
private:
func_type m_func;
};
MyFunction
应专门用于函数签名类型。
注意:std::function
实际上更复杂。