我有一個有很多功能,但本質上是一個向量類模板類。我想添加一個函數只是布爾類型。專業模板類成員函數只有一種類型的
#include <vector>
template <typename T>
class reflected{
private:
T*dev_;
T*host_;
ar_size size;
reflected<T>& operator=(reflected<T>& rhs);//do not impliment. assign not allowed.
reflected(reflected<T>& old); //do not impliment. Copy not allowed.
public:
reflected():size(0L),dev_(NULL),host_(NULL){}
reflected(ar_size n):size(n),dev_(NULL),host_(NULL){init();}
reflected(const T*x,ar_size n):size(n),dev_(NULL),host_(NULL){init();set(x);}
~reflected();
void init();
void init(ar_size n);
void init(const T*x,ar_size n);
void set(const T * x);
void setat(ar_index i, T x);
const T getat(ar_size i);
const T * devPtr();
const T operator [](const ar_index i);
ar_size length(){return size;}
};
我想一個函數vector<ar_index> reflected<bool>::which()
增加反射類,這是它將使意義的唯一個案的特殊情況。做這個的最好方式是什麼。編譯器似乎不喜歡添加which()來反射,只爲bool定義它。
我不確定他/她是否希望該方法失敗或者只是它沒有被定義*,而是用於*'bool'。無論如何,你的解決方案是非常好的:) – 2010-11-11 21:39:52
這與John Dibling的答案相比如何?額外的「間接」是否有任何優勢?謝謝 – icecrime 2010-11-11 21:50:42
@icecrime你不需要重複構造函數,它可以縮放。如果某個函數只對'int'有意義而對其他函數沒有意義,則不需要另一個派生類。我喜歡爲此使用重載。 – 2010-11-11 22:04:21