"-6ren"> "-我遇到了一些让我困惑的代码。我已将混淆归结为一个简单的案例 template struct S { T member; static const size_t size; }; str-6ren">
gpt4 book ai didi

c++ - 对静态成员使用 "template<>"

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:58 24 4
gpt4 key购买 nike

我遇到了一些让我困惑的代码。我已将混淆归结为一个简单的案例

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:为什么我在最后一行需要“template<> ”,因为 US_t有完整描述吗?

我实际遇到的代码 - 编译 - 具有以下等价物:

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

我很确定这是一个剪切和粘贴错误,但由于编译而未被捕获。Q2:这有效吗?如果是这样,为什么?[我注意到 codepad.org 将使用“template<>template<>”编译代码。]

最佳答案

将您的 typedef 想象成一个在编译时而不是预处理器时展开的宏。

然后没有 template<>你会有

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

这不是一个有效的语法,因为你正在进行模板特化

关于c++ - 对静态成员使用 "template<>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30926815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com