为什么需要外部链接来引用非类型模板参数

时间:2016-06-04 15:56:04

标签: c++ templates extern non-type

假设我有结构:

template<const float& myFloat>
struct Thing{ };

稍后宣布我必须这样做:

extern constexpr float value = 12.0f;
Thing<value> MyThing;

为什么需要 extern关键字。我的意思是浮点数是extern还是不是{应该是吗?)

1 个答案:

答案 0 :(得分:3)

假设您的代码位于某处的头文件中。

碰巧,Thing也有一个operator(),它存储在两个不同的 cpp文件中的std::function中。

有人从两个std::function中获取了typeids并询问它们是否相等。

浮子上有外部连接,它们显然是同一类型。没有,就没有办法表达它们。

基本上,类型取决于身份而不是float的值,并且只有外部链接全局变量在同一&#34;级别&#34;正如标准所要求的那样。

现在同样可以说lambda,但lambdas经常导致ODR违规。