Частичная специализация шаблона
От: Andrew_manik Беларусь  
Дата: 09.12.10 12:40
Оценка:
Как правильно выполнить частичную специализацию метода для шаблона класса?

template <typename T1, typename T2>
class MyClass {
    double foo(T1 a, T2 b);
};

template <>
double MyClass<float, int>::foo(float a, int b) {   // OK
    return (double)a+b;
}

template <typename T1>
double MyClass<T1, short>::foo(T1 a, short b) {
    return (double)(a*b);
}
// MSVS 2005:
// error C2244: 'MyClass<T1,T2>::foo' : unable to match function definition to an existing declaration
// see declaration of 'MyClass<T1,T2>::foo'

// Intel C++ 11.1
// error: template argument list must match the parameter list
// double MyClass<T1, short>::foo(T1 a, short b) {
//        ^

// http://www.comeaucomputing.com/tryitout/
// "ComeauTest.c", line 21: error: template argument list must match the parameter list
//   double MyClass<T1, short>::foo(T1 a, short b) {
//          ^
Re: Частичная специализация шаблона
От: uzhas Ниоткуда  
Дата: 09.12.10 12:52
Оценка:
Здравствуйте, Andrew_manik, Вы писали:

A_>Как правильно выполнить частичную специализацию метода для шаблона класса?

у функций\методов не бывает частичной специализации
частичная специализация бывает у классов

template <typename T1, typename T2>
class MyClass {
    double foo(T1 a, T2 b);
};

template <>
double MyClass<float, int>::foo(float a, int b) {   // OK
    return (double)a+b;
}

template <typename T1>
class MyClass<T1, short> {
  double foo(T1 a, short b) {
    return (double)(a*b);
  }
};
Re: Частичная специализация шаблона
От: rg45 СССР  
Дата: 09.12.10 13:01
Оценка: +1
Здравствуйте, Andrew_manik, Вы писали:

A_>Как правильно выполнить частичную специализацию метода для шаблона класса?


Частичная специализация допускается для шаблонов классов, но не для шаблонов функций (функций-членов в т.ч.). Популярный способ решения данной проблемы — реализация шаблонов функций через шаблоны классов. Чтоб давать более конкретные советы, требуется более конкретное знание задачи — приведенный пример явно чересчур синтетический (в нем даже не видно использования полей-членов и непонятно, почему данные функции-члены не объявлены статическими, и вообще зачем они являются членами класса).
--
Справедливость выше закона. А человечность выше справедливости.
Re: Частичная специализация шаблона
От: Grey-  
Дата: 10.12.10 09:29
Оценка:
Здравствуйте, Andrew_manik, Вы писали:

A_>Как правильно выполнить частичную специализацию метода для шаблона класса?


Посмотрите в сторону IntToType шаблона и использование перегрузки взамен специализации

Всего доброго
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.