类型名称 int 的概念
Concept for type name int
我正在尝试为类型名称 int
写一个概念,但找不到。我想不出任何仅对 int
类型有效而对 double
、float
等无效的操作。是否可以使用当前标准编写此操作?提前谢谢你。
注意:我的目标是通过修复带有问号的部分来使这段代码正常工作。如果参数是 int
那么 operation
函数 returns 它们的总和,如果参数不是 int
那么函数 returns 它们的乘积。
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;
}
概念由布尔表达式定义
template<typename T>
concept Int = std::is_same_v<T, int>;
但由于concept ordering issues,最好使用
template<typename T>
concept Int = std::same_as<T, int>;
但是,您应该始终在足够的情况下使用更简单的工具。在你的情况下,简单地重载就可以了
auto operation(auto t1, auto t2)
{
return t1 * t2;
}
auto operation(int t1, int t2)
{
return t1 + t2;
}
值得注意的是,don't specialize your functions,它通常是错误的。
我正在尝试为类型名称 int
写一个概念,但找不到。我想不出任何仅对 int
类型有效而对 double
、float
等无效的操作。是否可以使用当前标准编写此操作?提前谢谢你。
注意:我的目标是通过修复带有问号的部分来使这段代码正常工作。如果参数是 int
那么 operation
函数 returns 它们的总和,如果参数不是 int
那么函数 returns 它们的乘积。
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;
}
概念由布尔表达式定义
template<typename T>
concept Int = std::is_same_v<T, int>;
但由于concept ordering issues,最好使用
template<typename T>
concept Int = std::same_as<T, int>;
但是,您应该始终在足够的情况下使用更简单的工具。在你的情况下,简单地重载就可以了
auto operation(auto t1, auto t2)
{
return t1 * t2;
}
auto operation(int t1, int t2)
{
return t1 + t2;
}
值得注意的是,don't specialize your functions,它通常是错误的。