有关继承基类内定义的类型的问题
class Root
{
public:
typedef int _Bty;
};
template< class _Bty > class A : public _Bty/* 此处的_Bty是Root */
{
public:
/* VS2013不支持继承构造函数,用此法效仿。 */
template< typename ..._Types >
A( _Types&& ...Args ) : _Bty( Args... )/* 而此处的_Bty是Root(基)类中定义的int */
{
}
};
A< Root >Ins;以上代码产生以下编译错误:
“A<Root>”: 非法的成员初始化:“_Bty”不是基或成员
参见对正在编译的函数 模板 实例化“A<Root>::A<>(void)”的引用;(就是 定义 Ins变量的一行代码“A< Root >Ins”)。
以上代码编译环境为VS2013;
类模板 A 的模板参数的名称_Bty和基类中定义的类型_Bty名称相冲突,所以引发此问题。
我的问题是:这种通过模板参数来确定基类类型的做法如何才能够保证避免模板参数名和基类中的类型名不相冲突。
我重新翻了几本书有关模板的章节和MSDN模板规范以及微软的扩展行为,都没有找到与此有关的答案。所以来此求教。
还请赵老师以及专职回贴赚分者高抬贵手,不要回答此问题。
...全文
相关推荐
C++ 虚基类 继承 多态示例
**虚基类**: 在C++中,虚基类的目的是解决多重继承中的菱形问题。当一个类从两个或更多具有共同基类的类继承时,如果没有使用虚基类,那么基类的实例会被每个派生类复制一次,可能导致数据冗余。
继承派生虚基类.rar
总结来说,"继承派生虚基类"实验旨在让学生深入理解C++中的继承机制,特别是虚基类在解决多继承问题中的作用,以及如何在实际场景中应用这些知识。
用c++ 定义一个车(Vehicle)基类,有Run,Stop等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)
虚基类的应用在这个例子中,虽然没有明确地使用虚基类,但理解虚基类的概念仍然非常重要。当一个类从多个基类派生时,如果这些基类又有一个共同的基类,则可以使用虚基类来避免重复继承问题。
C++经典资料\虚基类与虚函数
虚基类与虚函数是C++中面向对象编程的关键特性,它们主要解决多继承带来的问题。在C++中,一个类可以作为多个派生类的基类,这可能导致同一个基类在派生类中出现多次,即所谓的"菱形继承"问题。
虚基类的使用实例
**函数重写**:如果决定改写基类所提供的虚拟函数,那么派生类所提供的新定义必须完全符合基类所声明的函数原型,包括参数列表、返回类型以及是否为常量成员函数等。4.


