Как мне сделать эту явную специализацию ?

Возможен ли следующий дизайн?:

template <typename T>
class Test{
 public:
  template <typename Z>
  void doSomething();
  //rest of things
 private:
  T obj;
  //some things
};

Теперь, если бы это было возможно, я бы сделал несколько явных специализаций для doSomething, чтобы в конце у меня было несколько версий, как показано ниже:

void doSomething<int>(){
 //do something
}
void doSomething<double>(){
 //do something
}
...etc

который кажется невозможным. Я не могу найти никакого синтаксиса для выполнения этой работы, тогда я подумал, что, возможно, дизайн должен быть таким, как следует, чтобы все аргументы шаблона передавались самому классу шаблона:

template <typename T,typename Z>
class Test{
 public:
  void doSomething();
  //rest of things
 private:
  T obj;
  //some things
};

Затем я попробовал частичную специализацию, которая даже не компиляция:

template <typename T>
void Test<T,int>::doSomething(){
 //do something
}
template <typename T>
void Test<T,double>::doSomething(){
 //do something
}
...etc

Я получил следующие ошибки для явной специализации:
ошибка №1: в списке аргументов шаблона после имени шаблона класса должны быть указаны параметры в том порядке, в котором они указаны в списке параметров шаблона.
ошибка №2: «Контейнер1»: слишком мало аргументов шаблона.

6
задан Pooria 25 November 2010 в 08:01
поделиться