Здравствуйте, Caracrist, Вы писали:
C>Здравствуйте, Alexander G, Вы писали:
AG>>Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.
C>спасибо за пояснение
C>П.С. Есть какая то особая причина почему это так?
Потому что то же самое можно сделать с помощью перегрузки.
Здравствуйте, Warturtle, Вы писали:
W>Здравствуйте, Caracrist, Вы писали:
C>>Здравствуйте, Alexander G, Вы писали:
AG>>>Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.
C>>спасибо за пояснение
C>>П.С. Есть какая то особая причина почему это так? W>Потому что то же самое можно сделать с помощью перегрузки.
... или шаблонов классов.
Здравствуйте, Warturtle, Вы писали:
W>Здравствуйте, Warturtle, Вы писали:
W>>Здравствуйте, Caracrist, Вы писали:
C>>>Здравствуйте, Alexander G, Вы писали:
AG>>>>Частичная специализация возможно только для шаблонов класснов, не для шаблонов функций.
C>>>спасибо за пояснение
C>>>П.С. Есть какая то особая причина почему это так? W>>Потому что то же самое можно сделать с помощью перегрузки. W>... или шаблонов классов.
struct S1
{
template<typename T, bool> void F1();
template<typename T, int> void F2();
template<typename T, void *> void F3();
static int hmm;
//тут ещё много всяких деклараций, а определения в cpp
};
// а вот это определяет смысл, но не компилируетсяtemplate<typename T>
void S1::F1<T, true> (){}
template<typename T>
void S1::F2<T, 1> (){}
template<typename T>
void S1::F3<T, (void*)(&S1::hmm)> (){}
Запись типа:
template<typename T>
void ffff<T,1>(){}
не корректна, так как не существует частичной специализации для функций, не зависимо от того являются ли они членами класса или нет.
Лучше написать перегруженную версию с одним маленьким приемом от Андрея Александреску:
Здравствуйте, Caracrist, Вы писали:
C>Здравствуйте, Warturtle, Вы писали:
C>>>П.С. Есть какая то особая причина почему это так? W>>Потому что то же самое можно сделать с помощью перегрузки.
C>Это не связанные вещи... уже пояснили http://www.rsdn.ru/forum/cpp/3639651.1.aspx