次のクラスを実装しました。
template<typename Enum>
class EnumDescription
{
//TODO Force Enum to be an enum type
public:
static std::string get( const Enum val );
};
これは期待どおりに機能しますが、ここでEnumテンプレートパラメーターをenum / enumクラスのみに制約したいと思います。
C ++のフレーバーによって異なります。
C ++ 17
最も書きやすい方法は静的アサーションです
template<typename Enum>
class EnumDescription
{
static_assert(std::is_enum_v<Enum>);
public:
static std::string get( const Enum val );
};
C ++ 20
テンプレートにアドホック制約を指定できます
template<typename Enum> requires std::is_enum_v<Enum>
class EnumDescription
{
public:
static std::string get( const Enum val );
};
または、おそらくより良いことに、再利用可能な概念で
template<typename E>
concept EnumType = std::is_enum_v<E>;
template<EnumType Enum>
class EnumDescription
{
public:
static std::string get( const Enum val );
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加