Возможен ли следующий дизайн?:
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»: слишком мало аргументов шаблона.