我有这个代码
class ClassX {};
class ClassY : public ClassX {};
typedef std::function<void (ClassX*)> myCaller;
class Foo {
Foo()
{
createCaller(this, &Foo::bar); //line 22 with the error
}
template <typename Class>
void createCaller(Class *obj, void (Class::*func)(ClassX*))
{
myCaller mc = std::bind(func, obj, std::placeholders::_1);;
}
void bar(ClassY* x)
{
printf("fooBrr");
}
};
它工作正常,直到 bar 采用扩展 ClassX 而不是 ClassX 的 ClassY。
我得到编译时错误:main.cpp:22:9: No matching member function for call to 'createCaller'
问题是我将如何允许 bar 获取扩展 ClassX 的任何类或任何类的参数?有可能吗?