2010-10-29 5 views
0

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

template <typename T> 
class A{ 
    A(T){} 
}; 

template <typename T> 
class A{ 
    A(T*){} 
}; 

int main(){ 
    A<int*> a((int*)0); 
    A<int> a((int*)0); 
    return 0; 
} 
+2

Просто, чтобы вы знали: синтаксис обратной линии для встроенного кода. Если вы хотите отформатировать блоки кода, отложите каждую строку на четыре пробела. http://daringfireball.net/projects/markdown/ –

+0

классы шаблонов могут быть специализированными (частично или полностью) – Anycorn

+0

@ Джонатан Стерлинг, спасибо за ваш намек. как я могу отложить блок-код для 4 пробелов? Кажется, вкладка на весь блок не работает. Есть ли сокращение, чтобы сделать это? Или мне нужно вставлять пробелы по строкам? – Thomson

ответ

5

№ Это запрещено. Вместо этого шаблон шаблона может быть специализированным (включая частичную специализацию). Это в значительной степени обеспечивает эффект перегрузки (который предназначен только для функций)

Обратите внимание, что параметры шаблона не могут быть выведены из аргументов конструктора.

template<class T> struct X{ 
    void f(){} 
}; 

template<class T> struct X<T*>{ 
    void f(){} 
}; 

int main(){ 
    X<int> x; 
    x.f();   // calls X<T>::f 

    X<int *> xs; 
    xs.f();   // calls X<T*>::f 
}