【发布时间】:2013-02-12 12:57:36
【问题描述】:
对于一个库,我想要一个函数来接受另一个函数及其参数,然后将它们全部存储起来以供以后调用。参数必须允许任何类型的混合,但函数只需要返回 void。像这样的:
void myFunc1(int arg1, float arg2);
void myFunc2(const char *arg1);
class DelayedCaller
{ ...
public:
static DelayedCaller *setup(Function func, …);
};
...
DelayedCaller* caller1 = DelayedCaller::setup(&myFunc1, 123, 45.6);
DelayedCaller* caller2 = DelayedCaller::setup(&myFunc2, "A string");
caller1->call(); // Calls myFunc1(), with arguments 123 and 45.6
caller2->call(); // Calls myFunc2(), with argument "A string"
一种方法是让 DelayedCaller::setup() 接受 std::function,并让我的库用户在调用 setup() 之前使用 std::bind()。但是,有没有办法实现 setup() 让用户不需要自己进行绑定?
编辑:DelayedCaller 是一个现有的类。 setup() 是我想添加的一个新的静态方法。
【问题讨论】:
-
您可以将 std::async 与惰性求值一起使用。它返回一个 std::future 对象,用于存储任务以供以后使用。