c ++继承自模板结构

时间:2013-12-08 11:33:43

标签: 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 {
     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,另一个是为两个结构编写不同的构造函数,并且还继承操作方法。我怎么能同时做到这一点?

谢谢!

1 个答案:

答案 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(...) { ... }
};