类型名称 int 的概念

Concept for type name int

我正在尝试为类型名称 int 写一个概念,但找不到。我想不出任何仅对 int 类型有效而对 doublefloat 等无效的操作。是否可以使用当前标准编写此操作?提前谢谢你。

注意:我的目标是通过修复带有问号的部分来使这段代码正常工作。如果参数是 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,它通常是错误的。