C++ 模板类继承规则 模板 结构单元 { 单元格(T行,T列) { cellid=std::make_pair(行、列); } std::pair getcellid(); 私人: 成对细胞体; };
现在,我有一个矩阵类,它派生自C++ 模板类继承规则 模板 结构单元 { 单元格(T行,T列) { cellid=std::make_pair(行、列); } std::pair getcellid(); 私人: 成对细胞体; };,c++,templates,inheritance,C++,Templates,Inheritance,现在,我有一个矩阵类,它派生自cell 这项工作: 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
这项工作:
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;
};
模板
类别矩阵:公共单元
{
};
这不起作用:
template<typename T>
class matrix : public cell<T>
{
};
类矩阵:公共单元
//错误:T未命名类型
这是可以理解的
方法1的缺点是,matrix
类现在可以使用模板参数T
,这在本用例中是不可能发生的
是否有一种方法可以防止
矩阵
类访问模板参数,同时仍然能够从类单元格
中派生是的,在将模板类单元格
实例化为矩阵
的基类时,必须选择实际类型。如果矩阵
不是模板,那么矩阵
的任何实例化都没有类型灵活性,因此单元格
的类型必须在矩阵
的定义中完全知道。例如,这将起作用:
class matrix : public cell<T>
// Error: T does not name a type
类矩阵:公共单元{…};
我认为您对模板的工作原理有一个基本的误解
编写一个有用的matrix
类,而该类不能提到其单元格的类型T
,这在本质上是不可能的。无法返回单元格值或对单元格执行计算
您编写的“工作”类定义是您需要使用的。“不工作”的定义对编译器或我来说都不合理
然而,创建一个矩阵作为一个单元的子类可能不是你真正想要的设计。矩阵是多个单元的数组,而不是特定类型的单元。你可能想要这样的东西
class matrix : public cell<int> { ... };
类矩阵
{
细胞c[3][3];
};
但这很难说,因为你不清楚,而且你的单元格中嵌入了行和列的值(对我来说很神秘),所以如果没有更多的代码,我不能确定。您的设计确实很奇怪。这毫无意义,编译器怎么知道T是什么?是否要
类矩阵:公共单元格
?或类矩阵:公共单元格
。。。为什么不希望matrix
访问t
?矩阵可以由由float/int值组成的单元格组成……其想法是让单元格处理该信息。@basav那么matrix
必须是一个模板。否则你将不知道你想要的单元格是什么类型。有道理。我将继续。你可以有一个矩阵,其中的单元格由浮点值/int值组成……因此,我尝试了模板。我正在学习模板的使用
class matrix
{
cell<float> c[3][3];
};