Pie*_*tro 2 c++ enums templates
我实现了以下类:
template<typename Enum>
class EnumDescription
{
//TODO Force Enum to be an enum type
public:
static std::string get( const Enum val );
};
Run Code Online (Sandbox Code Playgroud)
这按预期工作,但现在我想将 Enum 模板参数限制为仅枚举/枚举类。
取决于你的 C++ 风格。
C++17
最简单的写法是静态断言
template<typename Enum>
class EnumDescription
{
static_assert(std::is_enum_v<Enum>);
public:
static std::string get( const Enum val );
};
Run Code Online (Sandbox Code Playgroud)
C++20
您可以在模板上指定临时约束
template<typename Enum> requires std::is_enum_v<Enum>
class EnumDescription
{
public:
static std::string get( const Enum val );
};
Run Code Online (Sandbox Code Playgroud)
或者,可能更好,具有可重用的概念
template<typename E>
concept EnumType = std::is_enum_v<E>;
template<EnumType Enum>
class EnumDescription
{
public:
static std::string get( const Enum val );
};
Run Code Online (Sandbox Code Playgroud)