Вопрос такой — есть ли какой-то способ при создании специализации шаблона класса (полной или частичной — неважно) описывать (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