【问题标题】:How do I use concepts in if-constexpr?如何在 if-constexpr 中使用概念?
【发布时间】:2019-07-01 13:47:30
【问题描述】:

如何使用if constexpr 中的概念?

在下面的例子中,如果T 满足integral 的要求,则返回 1 给if constexpr,否则返回 0?

template<typename T>
concept integral = std::is_integral_v<T>;

struct X{};

template<typename T>
constexpr auto a () {
    if constexpr (/* T is integral */) {
        return 1;
    } 
    else {
        return 0;
    }
}

int main () {
    return a<X>();
}

【问题讨论】:

  • 这个特殊的函数可以简化为return integral&lt;T&gt;;

标签: c++ c++-concepts c++20 if-constexpr


【解决方案1】:

Concepts 被命名为 boolean 基于模板参数的谓词,在编译时进行评估。

constexpr if 语句中,条件的值必须是bool 类型的上下文转换的常量表达式。

所以在这种情况下,用法很简单:

if constexpr ( integral<T> )

【讨论】:

  • 这在标准的最新草案中仍然有效吗?还是我们需要requires integral&lt;T&gt;
【解决方案2】:

这样做就足够了:

if constexpr ( integral<T> )

因为integral&lt;T&gt; 已经可以测试为bool

【讨论】:

  • 这在标准的最新草案中仍然有效吗?还是我们需要requires integral&lt;T&gt;
猜你喜欢
  • 2018-04-19
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多