【发布时间】:2017-04-12 10:22:43
【问题描述】:
我有一个有两个重载成员的类。一个接受整数,另一个是模板函数,接受一个参数。
class MyClass
{
public:
void doSomething(int data){ std::cerr << data;}
template <typename T> doSomething(T &&data){ std::cerr << data;}
};
我要绑定这个函数
MyClass myobject;
auto my_bind = std::bind(&MyClass::doSomething, &myobject, 2);
my_bind();
但这并不能编译,因为编译器无法推断出要调用的函数。
错误:没有匹配的函数调用'bind(未解析的重载函数类型,MyClass*,int)'
我知道我必须强制转换函数。
auto my_bind2 = std::bind(static_cast<void (MyClass::*)(int)>(&MyClass::doSomething), &myobject, 2);
现在它可以按预期编译和工作了。
但是如果我想将它与任何其他参数绑定以调用模板函数怎么办?这甚至可能吗?我找不到语法。
这不起作用:
auto my_bind3 = std::bind(static_cast<void (MyClass::*)(std::string)>(&MyClass::doSomething), &myobject, std::string("Hello"));
我想避免使用 lambda。我简化了 MCVE 的代码,但在实际代码中我应该使用成员指针。
感谢您的帮助
【问题讨论】:
-
“我想避免使用 lambdas。” - 你更喜欢硬方法?
标签: c++