【发布时间】:2017-10-15 11:36:08
【问题描述】:
我正在尝试创建一个模板类,该类反过来会在函数上生成一个包装器。然后该类将返回包装器作为结果。我想使用模板来拥有可以与具有不同签名的任何函数一起使用的通用类,例如:
std::function<void()>task = std::bind(fun1, param1, param2);std::function<int(int, int)>task = std::bind(fun2, param1, param2);
我想要这样的东西:
template <typename T1, typename T2>
class A {
A (string param1, string param2) {
// The created wrapper here i.e. 'task' will be returned by the class.
function<T1>task = bind(T2, param1, param2);
}
// Return the created wrapper in the constructor.
function<T1> returnWrapper() {
return task;
}
};
上面的代码主要是伪代码,因为它无法编译,但可以让我了解我在寻找什么。有什么解决办法吗?我认为应该不仅仅是简单地使用模板作为函数的签名。任何帮助将不胜感激。如果可能的话,我还希望能够将任意数量的参数传递给“绑定”。
【问题讨论】:
-
如果可以,以后怎么称呼?
-
我没有写完整的伪代码,但目的是该类将返回包装器,以便以后可以调用它。在这种情况下,该类应返回“任务”。
-
啊,一开始我以为你想生成一个可以容纳任何功能的通用非模板类型。但我看到类型仍然取决于函数类型
T1。A(string, string)是一个构造函数,它不能返回任何东西。你的意思是task是你以后可以访问的班级成员?或者,A类型的对象可能可以直接调用。 -
你绑定的是什么?这两个例子提到了一个名为
fun的东西——但是A的构造函数没有将一个作为参数。它应该是什么,它应该来自哪里?让我们这样说吧:假设您设法按照您想要的方式实现了一个类。展示一个具体的例子来说明你将如何使用它。 -
Igor Tandetnik:我实际上想使用模板来将其用于任何类型的功能并生成任意包装器。我编辑了这个问题,所以使用了 fun1 和 fun2。我想这样使用它: function
ff = A ("param1", "param2");
标签: c++ c++11 std-function stdbind