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较新的编译器不需要它,如果出现奇怪的错误,请尝试添加一个空格。