【发布时间】:2016-05-19 06:57:20
【问题描述】:
我只是顺着C++的requires关键字跑了,想知道我的理解到现在是否正确:requires和enable_if都提供编译模板的时间限制。如果 require 约束将被包括在内。
requires 提供了一种约束函数参数的方式,enable_if 的主要目的是将编译时转换限制为模板类型本身的某些条件。
例子:
#include <type_traits>
template<typename T>
concept T AdditiveGroup
{
return requires(const T pA, const T pB)
{
{ pA + pB }->T;
};
};
template<typename T>
typename std::enable_if<std::is_integral<T>::value, bool>::type
addElements(const T pA, const T pB)
{
return (pA + pB);
}
这里的概念当且仅当 pA 和 pB 可以添加时才有效,而 enable_if 条件将评估限制为整数类型。
感谢您告诉我是否正确!
P.S.:我还不太确定 require 约束的语法,这似乎有所不同。另外,暂时不知道哪个编译器接受它们,所以感谢任何提示!
【问题讨论】:
-
requires语法来自尚未最终确定的 Concepts Lite。 -
我认为它仍在开发中。假设它将被考虑作为未来的标准,我想知道我的想法是否正确。同时我发现这篇很有帮助的文章,这表明这两种方法基本上都是基于模板类型的:accu.org/index.php/journals/2198
-
有关示例/详细信息,您可以查看N4377 - Programming Languages — C++ Extensions for Concepts。不幸的是 concepts didn’t make C++17 但 GCC v6 支持它们(通过
-fconcepts开关)。 -
啊,坏消息在 C++17 中没有它们。非常感谢您的链接!
标签: c++ templates constraints enable-if c++-concepts