【发布时间】:2021-12-04 18:24:24
【问题描述】:
假设我有 C 风格的 callback 类型,如下所示。对于 C++,我可以创建一个 std::function 类型,如 callback2,这种声明是我能找到的所有示例。但是,我可以像下面的callback3 一样重复使用callback,而不是再次输入签名?
如果callback3 是可能的,
-
如何调用回调?像下面这样的
c.target<callback>();是调用回调的正确方法吗? -
如何传递成员函数?对于普通类型,我可以使用
worker2([this]() {toBeCalled();});,但worker3([this]() {toBeCalled();});不起作用。
代码
typedef void (*callback)();
typedef std::function<void()> callback2;
typedef std::function<callback> callback3;
void worker(callback c)
{
c();
}
void worker2(callback2 c)
{
c();
}
void worker3(callback3 c)
{
//Is this the way to call the callback?
c.target<callback>();
}
class Caller
{
public: Caller()
{
//worker2([this]() {toBeCalled();});
worker3(????);
}
void toBeCalled()
{
std::cout << "toBeCalled()";
}
};
【问题讨论】:
-
我建议你看看标准库如何处理可调用对象:使用模板。使用模板,您几乎可以传递任何可调用的内容,例如合适的 lambda 函数(我建议您使用)。
标签: c++ std-function