泛型std::函数上的包装器类
Wrapper class over generic std::function
我正试图编写一个包装类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 << "hin"; });
f.invoke();
}
这不会编译,并给出以下错误
error C2091: function returns function
我怎样才能做到这一点?
更改此项:
foo<void()> f([&](){ std::cout << "hin"; });
到这个
foo<void> f([&](){ std::cout << "hin"; });
演示
或者,您可以使用函数类型参数化foo
,就像std::function
所做的那样:
template<class T>
class foo;
template<class R, class ...Args>
class foo<R(Args...)> {...};
foo<void()> f([&](){ std::cout << "hin"; });
演示
相关文章:
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 将函数包装器转换为 std::function
- std::reference_wrapper 打开包装器
- 将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 使用"std::enable_if"转发包装失败
- std::包含 std::函数回调的多个包装器的向量不起作用
- pybind11:如何包装以 std::vector<double> 为参数以避免数据复制的 C++ 函数
- 在同一接口中包装不同的 std::vector<T>
- 包装 std::istream 时出现问题,移动后unique_ptr不为空
- Swig:如何从SwigpyObject获取包装std :: shared_ptr的值
- SWIG:包装 std::map<key 时编译器错误,val *>
- SWIG-包装STD ::一对串时的内存泄漏
- 包装 std C++功能有时是一个坏主意
- 使用 boost::p ython vector_indexing_suite 包装 std::vector
- 在帮助程序方法中包装 std::get<>
- 包装std::忽略
- 在自定义类中包装std::packaged_task