我可以轻松地将成员函数绑定到a std::function带有capture子句的lambda表达式.
class Class
{
Class()
{
Register([=](int n){ Function(n); });
}
void Register(std::function<void(int)> Callback)
{
}
void Function(int Number)
{
}
};
Run Code Online (Sandbox Code Playgroud)
但我想直接绑定它们,如下所示.
// ...
Register(&Class::Function);
// ...
Run Code Online (Sandbox Code Playgroud)
我认为根据C++ 11标准,这应该得到支持.但是,在Visual Studio 11中,我收到了这些编译器错误.
错误C2440:'换行':无法从'int'转换为'Class*'
错误C2647:'.*':无法在'int'上取消引用'void(__thiscall Class ::*)(int)'
我有许多具有不同签名的回调函数.理想情况下,我想将它们放在一个向量中,并根据某些条件调用适当的一个.
例如
void func1(const std::string& value);
void func2(const std::string& value, int min, int max);
const std::vector<std::function<void(std::string)>> functions
{
func1,
func2,
};
Run Code Online (Sandbox Code Playgroud)
我意识到上述情况是不可能的,但我想知道是否有任何我应该考虑的替代方案.我还没有找到任何东西,我已经尝试过,std::bind但没有成功实现我想要的东西.
这样的事情可能吗?