模板类继承规则
template class inheritance rules
template<typename T>
struct cell
{
cell(T row,T column)
{
cellid = std::make_pair<T, T>(row, column);
}
std::pair<T, T> getcellid();
private:
std::pair<T, T> cellid;
};
现在,我有一个派生自cell<T>
的矩阵类。
这有效:
template<typename T>
class matrix : public cell<T>
{
};
这不起作用:
class matrix : public cell<T>
// Error: T does not name a type
这是可以理解的。
方法 1 的缺点是,matrix
类现在可以使用模板参数T
,这在本用例中不会发生。
有没有办法阻止matrix
类访问模板参数,同时仍然能够从类cell
派生。
是的,在实例化模板类cell<T>
作为matrix
的基类时,您必须选择实际类型。如果matrix
不是模板,那么没有为matrix
的任何实例化提供类型灵活性,因此在matrix
的定义中必须完全知道cell<T>
的类型T
。例如,这将起作用:
class matrix : public cell<int> { ... };
我认为您对模板的工作原理存在根本性的误解。
基本上不可能编写一个有用的matrix
类,而不能提及其单元格的类型T
。您无法返回单元格值或对单元格执行计算。
您编写的"工作"类定义是您需要使用的。"不起作用"的定义对编译器或我都不明智。
但是,无论如何,将矩阵创建为单个单元格的子类可能不是您实际想要的设计。矩阵是由多个单元格组成的数组,而不是特殊类型的单元格。你可能想要这样的东西。
class matrix
{
cell<float> c[3][3];
};
但是很难说,因为您不清楚它,并且您的单元格嵌入了行和列值(对我来说很神秘),因此没有更多代码,我无法确定。不过你的设计绝对很奇怪。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 此代码是否违反一个定义规则
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 生成文件不对文件使用隐式规则
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 继承中的内存对齐规则
- 在继承多个空类时,了解GCC/Clang vs MSVC2015之间的不同填充规则
- 使用继承和虚拟功能应用五个规则
- C++下标运算符的继承规则
- qi ::以继承属性为继承属性的规则
- 模板类继承规则
- C++中继承的重载规则
- 三/五规则是否适用于继承和虚拟析构函数
- 可变模板混合继承的可见性规则