Синтаксис для частичной специализации шаблона класса - PullRequest
0 голосов
/ 13 октября 2011

Далее я забываю некоторый правильный синтаксис для частичной специализации класса NumInfo или вообще возможно это сделать?

template<typename T>
struct NumInfo {
    T x;
    T y;

    void Print();
};

template<typename T>
void NumInfo <T>::Print() {
    /*.....*/
}

template<typename T>
struct NumInfo <float> {
    T x;
    float y;

    void Print();
};

template<typename T>
void NumInfo <float>::Print() {
    /*.....*/
}

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

У вашего дизайна есть проблема - сейчас у вас есть несколько классов с одинаковым именем NumInfo<float> и разными определениями (в зависимости от T).Чтобы это исправить, вам понадобится второй параметр шаблона, например:

template<typename S, typename T=S>
struct NumInfo
{
    T x;
    S y;

    void Print();
};

template<typename S, typename T>
void NumInfo<S,T>::Print()
{
    /*.....*/
}

template<typename T>
struct NumInfo<float,T>
{
    T x;
    float y;

    void Print();
};

template<typename T>
void NumInfo<float,T>::Print()
{
    /*.....*/
}
0 голосов
/ 13 октября 2011
template<typename T>
struct NumInfo {
    T x;
    T y;

    void Print();
};

template<typename T>
void NumInfo <T>::Print() {
    /*.....*/
}

template<>
struct NumInfo <float> {
    typedef float T;
    T x;
    float y;

    void Print();
};

void NumInfo <float>::Print() {
    /*.....*/
}
...