Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类继承规则 模板 结构单元 { 单元格(T行,T列) { cellid=std::make_pair(行、列); } std::pair getcellid(); 私人: 成对细胞体; };_C++_Templates_Inheritance - Fatal编程技术网

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];
};