【发布时间】:2020-12-23 20:40:11
【问题描述】:
我正在尝试为类型名称int 编写一个概念,但找不到。我想不出任何仅对int 类型有效而对double、float 等无效的操作。是否可以用当前标准编写它?提前谢谢你。
注意:我的目标是通过修复带有问号的部分来使此代码正常工作。如果参数是int,则operation 函数返回它们的和,如果参数不是int,则函数返回它们的乘积。
template<typename T>
concept Int = requires(T t){
????????
};
template<typename T>
auto operation(T t1, T t2)
{
if constexpr(!Int<T>)
return t1 * t2;
else
return t1 + t2;
}
【问题讨论】:
-
您要解决的问题是什么?
-
您使用概念来限制模板参数。如果你对 float 和 double 没问题,为什么还要使用一个概念呢?一个简单的模板就可以了。
-
std::same_as<T, int>?但你为什么要写一个概念?是if constexpr(std::is_same<T, int>::value)?我不认为概念“转换”为布尔值,我认为if (Integer<T>)是行不通的。 -
“想不出任何只对 int 有效的操作” 一个概念不必使用
requires,任何布尔表达式都可以。你可以写template <typename T> concept foo = std::is_same_v<T, int>;之类的东西(或者最好使用std::same_as) -
@KamilCuk 概念(带有模板参数)可以用作布尔值。
标签: c++ c++20 c++-concepts