gpt4 book ai didi

C++ 约束 enable_if 与 requires

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:30 24 4
gpt4 key购买 nike

我刚刚运行了 C++ requires 关键字,想知道到目前为止我的理解是否正确:requiresenable_if 都提供编译模板的时间限制。如果需要,将完全包含约束。

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 约束的语法,它似乎有所不同。此外,暂时不知道哪个编译器接受它们,所以感谢您的任何提示!

最佳答案

是的,你的理解似乎是正确的。使用 SFINAE 来约束模板(例如 enable_if)与概念约束模板具有相同的基本效果。但是(正如您提到的),SFINAE 有额外的副作用。

Ville's Jacksonville paper关于他在 C++17 中包含概念的基本原理,与概念相比,它很好地解释了基于 SFINAE 的约束的缺陷。本质上:

  • 概念允许在不关闭演绎且不干扰受约束函数模板的元元性的情况下约束函数参数。
  • 概念使得编写具有互斥约束的重载变得更加容易。
  • 概念支持广泛的约束设计,为界面设计者提供各种工具来决定特定界面需要哪种抽象。

关于C++ 约束 enable_if 与 requires,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37315979/

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