我有两个类来定义一些操作并保留矩阵行和列的记录。一个用于主机,另一个用于设备。
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()...
}
基类应如下所示:
template<typename T>
struct base_matrix {
T data;
int row;
int col;
// no constructors
// some matrix operations
add()...
}
但除了数据和构造函数的类型,其他人员是相同的。我必须实现三个目标,一个是将类型T专门化为device_vector或host_vector,另一个是为两个结构编写不同的构造函数,并且还继承操作方法。我怎么能同时做到这一点?
谢谢!
答案 0 :(得分:0)
怎么样
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(...) { ... }
};
如果你不能使用模板模板,那么就像这样:
template<typename V>
struct base_matrix
{
V data;
...
virtual void add(...) = 0;
};
struct host_matrix : base_matrix<host_vector<double>>
{
host_matrix() { ... }
...
void add(...) { ... }
};