部分类模板特化的语法

时间:2011-10-13 13:57:42

标签: c++ templates template-specialization

在下文中,我是否忘记了部分专用类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 个答案:

答案 0 :(得分:3)

您的设计存在问题 - 现在您有多个具有相同名称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()
{
    /*.....*/
}

答案 1 :(得分:0)

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() {
    /*.....*/
}