我如何在 if-constexpr 中使用概念?
How do I use concepts in if-constexpr?
如何使用 if constexpr
中的概念?
给出下面的例子,如果 T
满足 integral
的要求,那么给 if constexpr
给 return 1 什么,否则给 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>();
}
做就够了:
if constexpr ( integral<T> )
因为 integral<T>
已经可以测试为 bool
Concepts 在模板参数上被命名为 布尔值 谓词,在 编译时 .
评估
在 constexpr if
语句中,条件的值必须是 bool
.
类型的上下文转换常量表达式
所以在这种情况下,用法很简单:
if constexpr ( integral<T> )
如何使用 if constexpr
中的概念?
给出下面的例子,如果 T
满足 integral
的要求,那么给 if constexpr
给 return 1 什么,否则给 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>();
}
做就够了:
if constexpr ( integral<T> )
因为 integral<T>
已经可以测试为 bool
Concepts 在模板参数上被命名为 布尔值 谓词,在 编译时 .
评估在 constexpr if
语句中,条件的值必须是 bool
.
所以在这种情况下,用法很简单:
if constexpr ( integral<T> )