给定以下内容,"function"是什么类型?
Given the following, what type is "function"?
给定以下内容,"函数"是什么类型?
#include <functional>
#include <vector>
template<class T>
class Foo
{
public:
template<typename P, typename Q, typename R, typename... Args>
void Attach(P (Q::*f)(Args...), R p)
{
auto function = [p, f](Args... args)
{
(*p.*f)(args...);
};
Listeners.push_back(function);
}
private:
std::vector<std::function<T>> Listeners;
};
class Bar
{
public:
int Handler(int x, int y, int z)
{
return 0;
}
};
int main(void)
{
auto foo = Foo<int(int, int, int)>();
auto bar = Bar();
foo.Attach(&Bar::Handler, &bar);
}
对于某些上下文,我正在尝试创建一个在实例上调用方法的 lambda,将该 lambda 存储到集合中。 我的push_back无法编译,出现以下错误:
我最初使用 std::外部参照包装(283): 错误 C2440: 返回" : 无法从 "void" 转换为 "int"
bind 来制作一个我可以存储的 std::函数。 显然,我可以使用lambda(和可变参数模板,所以我不需要每个arity一个模板)来做到这一点,但到目前为止,它正在击败我。
当你构造了Foo
时,提供的显式模板参数是auto foo = Foo<int(int, int, int)>();
,
int main(void)
{
auto foo = Foo<int(int, int, int)>(); //<<<< Here is the template arguments when constructing Foo
auto bar = Bar();
foo.Attach(&Bar::Handler, &bar);
}
其中,注册侦听器时,函数签名返回类型为 void
auto function = [p, f](Args... args)
{
(*p.*f)(args...);
};
分辨率
所以要么你
- 更改 Foo 的显式模板参数,
auto foo = Foo<void(int, int, int)>();
返回 void 以匹配侦听器回调。 - 或者确保侦听器函数返回整数。
return (*p.*f)(args...);
注意:您可能打算从侦听器返回状态代码,但您可能错过了?所以第二个解决点在我看来是一个明显的合理问题
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- "Warning : No return statement in function returning non-void"是什么意思?
- 黄金描述的C++ "Key Function"是什么?
- 给定以下内容,"function"是什么类型?
- "inline function need to be DEFINED in all tranlation units"背后的理由是什么?
- "invalid use of non static member function" 这是什么?
- std::function<的含义是什么;void(参考*)>在C++中
- 在定义之前声明一个未定义的 std::function 的目的是什么?
- 运算符== 对于 std::function 的真正目的是什么?
- "error: ’myfn’ declared as function returning a function"是什么意思?
- 函数"int (*function())[10];"是什么意思?
- "C2447: '{' : missing function header (old-style formal list?)"是什么意思?
- "Expected '(' for function-style cast or type construction"错误是什么意思?
- "unformatted input function"到底是什么意思?
- "member function already defined or declared" - 这是什么意思?
- Std::function和Std::bind是什么,什么时候应该使用它们
- c++中与java.util.function. provider等价的是什么?
- "::function()" cpp 中是什么意思?