我正在尝试编写一个包装类 foo
,它以 std::function
作为参数并公开一个方法来调用该 std::function
。我尝试了以下但没有成功
template<class R, class ...Args>
class foo
{
public:
foo(std::function<R(Args...)> f)
:_f(f)
{
}
R invoke(Args... args)
{
return _f(args...);
}
private:
std::function<R(Args...)> _f;
};
int main()
{
foo<void()> f([&](){ std::cout << "hi\n"; });
f.invoke();
}
这不会编译并给出以下错误
error C2091: function returns function
我怎样才能让它工作?
最佳答案
改变这个:
foo<void()> f([&](){ std::cout << "hi\n"; });
对此
foo<void> f([&](){ std::cout << "hi\n"; });
或者你可以用函数类型参数化 foo
,就像 std::function
那样:
template<class T>
class foo;
template<class R, class ...Args>
class foo<R(Args...)> {...};
foo<void()> f([&](){ std::cout << "hi\n"; });
关于c++ - 泛型 std::function 上的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498364/