template <class T, class U, class Child>
class Parent {
public:
virtual T blah() {
return gaga;
}
protected:
T gaga;
};
class Child : public Parent<double, double, Child> {
virtual void blah(int overloaded) {
}
virtual void func() {
blah();
}
};
int main() {
Child* p = new Child();
}
为什么上面的代码不能编译?为什么我不能像那样重载我的虚函数?
我得到的错误:
prog.cpp: In member function ‘virtual void Child::func()’:
prog.cpp:16: error: no matching function for call to ‘Child::blah()’
prog.cpp:12: note: candidates are: virtual void Child::blah(int)
prog.cpp: In function ‘int main()’:
prog.cpp:21: warning: unused variable ‘p’
最佳答案
Child
中的方法void blah(int)
隐藏了Parent
中继承的T blah()
。您可以通过添加行
using Parent::blah;
给 child
。如果您希望能够访问 Parent::blah()
,您必须确保 using
语句位于公共(public)访问部分。所以你必须添加
public:
using Parent::blah;
private:
...
到 Child
的顶部,使 Parent::blah()
对所有对象可见。您还可以使用 Parent::blah()
而不仅仅是 blah()
显式引用基类方法。更多信息可用 here .
关于c++ - 虚拟模板函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134412/