繁体   English   中英

虚拟模板功能重载

[英]Virtual Template Function Overload

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 access部分中。 因此,您必须添加

public:
  using Parent::blah;
private:
  ...

Child的顶部,以使Parent::blah()对所有人可见。 您还可以使用Parent::blah()显式引用基类方法,而不仅仅是blah() 在此处获取更多信息。

您只是在孩子blah拥有不同的原型。 对于父级,它是T blah() ;对于子级,它是void blah(int) ,而它应该是double blah()以产生正确的虚函数重载。

另外,您在父级中有什么子模板参数?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM