模板专业化不能满足我的需要

时间:2015-02-09 10:23:00

标签: c++ templates template-specialization

我是C ++模板的新手。

我有一个模板结构AAA,它有一个名为field的字段。当有人用AAA<int>之类的int调用它时,我希望有一个名为second_field的附加字段。有人可以告诉我如何修复此代码吗?

template<typename T>
struct AAA
{
    T field;
};

template<typename T=int>
struct AAA<int>
{
    int second_field;
};

int main()
{
    AAA<double> ad;
    ad.field=3.14;

    AAA<int> ai;
    ai.second_field=5;

    return 0;
}

2 个答案:

答案 0 :(得分:4)

两件事:

1)专业化符号为template<>,而不是template<typename T=int>

2)与非专业类型相关的专业类型。这里没有继承权。 second_field将是唯一的字段。

将它们放在一起,你需要

template<>
struct AAA<int>
{
    int field;
    int second_field;
};

答案 1 :(得分:0)

对于所谓的模板特化,语法与代码中的语法略有不同:

template<>
struct AAA<int>
{
    int second_field;
};