我有一個類有兩個重載成員。一個接受一個整數,另一個接受一個參數的模板函數。演員未解決模板重載類成員
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();
綁定但這不會編譯因爲編譯器不能扣除調用哪個函數。
error: no matching function for call to 'bind(unresolved overloaded function type, 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的代碼,但在實際的代碼中,我應該使用成員指針。
感謝您的幫助
* 「我想避免使用lambda表達式。」 * - 你喜歡困難的方式? – WhiZTiM