c++ - 使用模板的函数继承

标签 c++

当基类 A 是抽象的时,除了一些在整个类层次结构中通用的函数之外......并声明了类 B:

template <class widgetType> class B : public A { ... };

并且声明了 C 类:

class C : public B<myWidget> { ... };

A 中声明的某些函数不会继承到类 C 是否有任何原因?

我在 A 中实现了两个具有相同名称但参数不同的(虚拟)函数,其中一个在 C 中被覆盖。当我尝试使用我的 C 类实例访问未被覆盖的函数时,编译器无法找到它。我看不出有什么不对...所以我很想知道是否有我不理解的有关模板和继承的特殊规则。

最佳答案

with the same name but different parameters

您遇到了函数隐藏问题。如果一个类定义了一个与基类中的方法同名的方法,无论它是否被覆盖,该方法都会对基类隐藏其他方法。模板与它无关。

当编译器试图解析一个函数名时,它首先在最派生类的上下文中查找。如果它找到在那里定义的名称,它就会停止更深入地查找,而只会考虑在同一级别定义的那些名称。

关于c++ - 使用模板的函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738967/

相关文章:

c++ - 从标准输入读取字符串

c++ - 写入 UTF-8 BOM 时出现异常

c++ - 使用 clang 转储内存布局

c++ - "library has no symbol"是什么意思?

c++ - 我将如何使用在 C++ 对象中扩展 libev 的库?

c++ - 使用 libvlc_video_set_format_callbacks 逐帧转码视频

c++ - 使用基类作为指针的安全容器

c++ - 使用 PyInstaller 卡住 Python 脚本时包括 C++ 可执行文件

c++ - 使用 C++ 进行图像处理还是继续使用 OpenCV?

c++ - C 文件* 到 ostream/istream