0

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

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

谢谢!

4

1 回答 1

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(...) { ... }
};
于 2013-12-08T11:36:13.053 回答