2

在最新的模板约束论文中,提出了一个约束模板参数的新工具集。此外,在 C++14 中提供了变量模板。变量模板允许定义类型参数化常量等。

没有提及这些功能如何交互。使用 pi 的规范示例,我们可以得到:

template<Integral T>
  constexpr double pi(3.141592653589793238);

template<Floating_point T>
  constexpr T pi(3.1415926535897932384626433832795029L);

这将强制 C/C++ 数字转换从整数到双精度。它还可以防止使用完全不相关的类型进行实例化。(看看这个,我们可能想用需要浮点 ctor 的东西来替换 Floating_point 以支持复数。)

我是否遗漏了其中一篇论文中的某些内容,还是正在研究中?也许它是免费的,不值得一提?

4

1 回答 1

2

在最新版本的提案(N4040,日期为 2014 年 5 月)中,答案是否定的:

5变量模板具有以下限制:

— 模板必须是不受约束的。

— 声明的类型必须是 bool。

— 声明必须有一个初始化器。

— 初始化器应该是一个约束表达式。

[ 例子:

template<typename T>
concept bool D1 = has_x<T>::value; // OK

template<typename T>
concept bool D2 = 3 + 4;           // Error: initializer is not a constraint

template<Integral T>
concept bool D3 = has_x<T>::value; // Error: constrained concept definition

—结束示例]

于 2014-07-22T06:20:14.067 回答