为什么这不是完整的模板专业化

时间:2015-05-07 11:53:15

标签: c++

我想专门针对什么' Pass'是的,我想知道为什么这不编译? (它是班级的一部分):

    struct Passes {
        enum Value {
            First,
            Second
        };
    };
    template<Passes::Value Pass_t> void output();
    template<> void output<Passes::Second>();

连连呢? 我使用intel编译器收到的错误是:

 error: an explicit template argument list is not allowed on this declaration

1 个答案:

答案 0 :(得分:3)

  

建议?

首先,发布错误消息。我假设你有一个类似于我的(一旦我将你的代码片段扩展为我可以编译的东西):

explicit specialization in non-namespace scope

然后,阅读错误消息。正如它所说,您只能在命名空间范围内专门化模板,而不是在类中:

struct Thing {
    // Primary template declared as a class member
    template<Passes::Value Pass_t> void output();
};

// Specialisation declared at namespace scope
template<> void Thing::output<Thing::Passes::Second>();