Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Частичная специализация шаблонного метода класса


Автор: np9mi7 1.6.2005, 17:01
Добрый день.
Есть код:
Код

template <class  T, class P> class CTest
{
public:
    virtual P get() const;
};
template <class T,class P> P CTest<T,P>::get() const 
{
    return P();
}
template <class T> class CTest<T,float>
{
public:
    virtual float get() const;
};
template <class T> float CTest<T,float>::get() const
{
    return float();
}


Компилируется.

Компилятор VC++ 7.1. Хочеться специализировать метод get частично, без частичной спецификации класса перед этим, те:
Код

template <class  T, class P> class CTest
{
public:
    virtual P get() const;
};
template <class T,class P> P CTest<T,P>::get() const 
{
    return P();
}
/*template <class T> class CTest<T,float>
{
public:
    virtual float get() const;
};*/
template <class T> float CTest<T,float>::get() const
{
    return float();
}

Компилятор:
Цитата
l:\Source\test\template_metod_virt\template_metod_virt\template_metod_virt.cpp(23): error C2244: 'CTest<T,P>::get' : unable to match function definition to an existing declaration


Вопрос: Что я делаю не так? Или всегда перед частичной спецификацией метода класса необходимо частично специфицировать шаблон класса?

Автор: segmentation_fault 1.6.2005, 17:33
На данный момент в C++ нельзя частично специализировать шаблонные функции (как методы класса так и глобальные функции), разрешается только полная специализация. Но классы частично специализировать можно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)