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