Можно сделать частичную специализацию членов шаблона класса
От: Zzealot Украина  
Дата: 20.12.09 20:59
Оценка:
Вопрос такой — есть ли какой-то способ при создании специализации шаблона класса (полной или частичной — неважно) описывать (definition) не все члены класса, а только те, которые меняются по отношению к первичному шаблону ?
Смотрел примеры в книгах — класс переписывают целиком — это ведь куча лишней работы ! А если мне требуется специализировать (модифицировать) только один из десяти методов класса ?
В стандарте ISO 14882-2003 (действующий стандарт С++) в разделе 14.7.3 (Explicit specialization) описывается синтаксис специализации отдельных членов класса:

template<class T1> class A {
template<class T2> class B {
template<class T3> void mf1(T3);
void mf2();
};
};

template<> template<class X>
class A<int>::B { };
template<> template<> template<class T>
void A<int>::B<double>::mf1(T t) { } //
// Здесь компайлер выдает ошибку: error C2039: 'mf1' : is not a member of 'A<T1>::B<X>'

Вместе с тем, на одном из сайтов
http://www.codersource.net/cpp_class_templates_specialization.html
прочитал, что если шаблон специализирован для какого-то типа, то все его члены должны быть описаны с использованием этого типа.

И чем глубже копаю, тем темнее становиться. Хотелось бы услышать мнение уважаемой общественности по этому вопросу.

Рукавишников Дмитрий aka Zzealot
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.