【发布时间】:2013-03-14 12:08:15
【问题描述】:
我有这个代码
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: 没有匹配的成员函数调用'createCaller'
问题是我将如何允许 bar 获取任何扩展 ClassX 的类或任何类的参数?有可能吗?
【问题讨论】:
-
向我们展示您的继承层次结构和您收到的确切错误。
-
是的。查看
mc- 根据定义,它必须是一个函数对象,接受ClassX*。但是bar只接受ClassY*- 所以 mc 不能将所有可能的参数委托给bar。
标签: c++ std typedef std-function