使用"模板<>"对于静态成员

时间:2015-06-18 22:21:47

标签: c++

我遇到了一些困扰我的代码。我把混乱归结为一个简单的案例

template<typename T>
struct S
{
    T member;
    static const size_t size;
};

struct U { int i; };
typedef S<U> US_t;

template<> const size_t US_t::size = sizeof(U);

Q1:为什么我需要&#34; template<>&#34;在最后一行,因为US_t被完整描述了?

我实际遇到的代码 - 编译 - 具有相同的代码:

template<>template<> const size_t US_t::size = sizeof(U);

我很确定这是一个剪切和粘贴的错误,因为它已经编译而没有被捕获。 Q2:这有效吗?如果是这样,为什么? [我注意到codepad.org将使用&#34; template<>template<>&#34;编译代码。]

1 个答案:

答案 0 :(得分:0)

想象一下你的typedef是一个在编译时而不是预处理器时间扩展的宏。

然后没有template<>你有

const size_t S<U>::size = sizeof(U);

这不是有效的语法,因为您正在进行模板专业化