在C++中,可以使用requires语法来限制函数模板的参数类型。如果一个参数类型满足requires语法中的条件,那么该参数类型可以作为模板实参。

下面是一个示例,展示了如何接受enum class CMD或整型的函数模板:

#include <type_traits>

enum class CMD { CMD1, CMD2, CMD3 };

template<typename T>
requires std::is_enum_v<T> || std::is_integral_v<T>
void process(T value)
{
    // 处理enum class CMD或整型的逻辑
}

int main()
{
    process(CMD::CMD1); // 使用enum class CMD作为模板实参
    process(42);       // 使用整型作为模板实参

    // process("test"); // 错误,不满足requires语法中的条件

    return 0;
}

在上面的示例中,函数模板process使用了requires语法来限制参数类型。模板参数类型T必须是enum class或整型,否则编译器会报错。

注意,requires语法在C++20中引入,如果你使用的是较早的C++标准,可能无法使用requires语法,需要使用其他方式来实现类似的功能

接受 enum class CMD 或 整形 的 函数模板使用C++ requires 语法

原文地址: https://www.cveoy.top/t/topic/iaBt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录