C++ c++;从模板结构继承

C++ c++;从模板结构继承,c++,nvcc,class-template,C++,Nvcc,Class Template,我有两个类来定义一些操作并保存矩阵行和列的记录。一个用于主机,另一个用于设备 struct device_matrix { device_vector<double> data; int row; int col; // constructors device_matrix() ... // some matrix operations add()... } struct host_matrix {

我有两个类来定义一些操作并保存矩阵行和列的记录。一个用于主机,另一个用于设备

struct device_matrix {

     device_vector<double> data;
     int row;
     int col;

     // constructors
     device_matrix() ... 

     // some matrix operations
     add()...

}


struct host_matrix {
     host_vector<double> data;
     int row;
     int col;

     // constructors
     host_matrix() ... 

     // some matrix operations
     add()...

}
结构设备矩阵{ 设备矢量数据; int行; int col; //建设者 设备\u矩阵()。。。 //一些矩阵运算 添加()。。。 } 结构主机矩阵{ 宿主向量数据; int行; int col; //建设者 主机_矩阵()。。。 //一些矩阵运算 添加()。。。 } 基类应该如下所示:

template<typename T>
struct base_matrix {
    T data;
    int row;
    int col;

    // no constructors

    // some matrix operations
    add()...
}
模板
结构基矩阵{
T数据;
int行;
int col;
//没有构造器
//一些矩阵运算
添加()。。。
}
但除了数据类型和施工人员外,其他人员都是相同的。我必须实现三个目标,一个是将类型T专门化为设备\向量或主机\向量,另一个是为两个结构编写不同的构造函数,以及继承操作方法。我怎么能同时做到呢

谢谢

怎么样

template<template<typename T> class V>
struct base_matrix
{
    V<double> data;
    ...
    virtual void add(...) = 0;
};

struct host_matrix : base_matrix<host_vector>
{
    host_matrix() { ... }
    ...
    void add(...) { ... }
};
模板
结构基矩阵
{
V数据;
...
虚空添加(…)=0;
};
结构主机矩阵:基本矩阵
{
主机_矩阵(){…}
...
无效添加(…){…}
};

如果无法使用模板,请执行以下操作:

template<typename V>
struct base_matrix
{
    V data;
    ...
    virtual void add(...) = 0;
};

struct host_matrix : base_matrix<host_vector<double>>
{
    host_matrix() { ... }
    ...
    void add(...) { ... }
};
模板
结构基矩阵
{
V数据;
...
虚空添加(…)=0;
};
结构主机矩阵:基本矩阵
{
主机_矩阵(){…}
...
无效添加(…){…}
};

使用nvcc。错误:类模板“推力::主机向量”与模板参数“V”不兼容。模板参数是缺少问题的解决方案。一个简单的类型参数在这里就可以了。是的,艾伦,你是对的,typename T就足够了。你能写一个答案让我接受吗?@user2684645更新了答案。请注意,然后必须传递完整的类型(即,
host\u vector
),我试图避免使用第一个变量。@user2684645较新的编译器不需要它,如果出现奇怪的错误,请尝试添加一个空格。