У меня есть класс шаблонов, который имеет множество функций, но по существу является классом векторов. Я хочу добавить одну функцию только к типу bool.Специализация функции члена класса шаблона только для одного типа
#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()
к частному случаю отраженного класса, который является единственным случаем, когда это будет иметь смысл. Каков наилучший способ сделать это. компилятор, похоже, не любит добавлять, который() отражается и только определяет его для bool.
Я не уверен, хочет ли он, чтобы метод потерпел неудачу или просто он не определен *, но для * 'bool'. Во всяком случае, ваше решение очень приятно :) –
Как это соотносится с ответом Джона Диблинга? Есть ли преимущество, обеспечиваемое дополнительной «косвенностью»? Спасибо – icecrime
@icecrime вам не нужно дублировать конструкторы, и он масштабируется. Если какая-то функция имеет смысл только для 'int', а не для других, вам не нужен другой производный класс. Мне нравится использовать перегрузку для этого. –