c++ - 在类特化中具有任何标签的枚举类型

标签 c++ class c++11 enums class-template

如何在类特化中拥有任何标签的enum类型?
因为这只适用于一个,即。 L 枚举 :

enum class K 
{
   a, b, c, d, e
};
enum class L 
{
   a, c, e,
};

template<enum L>
struct J 
{
   constexpr static int N = static_cast<int>(L::e);
   int n[N] = { 7 };

   void print() 
   {
      cout << N << "\n";
   }
};

int main()
{
   J <L::e> obj;
   obj.print();
   return 0;
}

如何让它像 K 和任何枚举标签一样通用,只要它具有相同的 e 成员名称?

最佳答案

如果你可以再提供一个模板参数,你可以传递任何enum

template<typename Type, Type en>
struct J 
{
   // ...
}

并构建对象

J <K, K::e> obj;
obj.print();

( See demo online )


同时使用 std::is_enum 检查传递的 Type ,您可以限制传递的模板类型。

关于c++ - 在类特化中具有任何标签的枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62242391/

相关文章:

python 子类 __set__ 不工作

c++ - 使用常量参数连接插槽

javascript - WebAssembly 从 wasm 调用 JavaScript 方法,即在 C++ 代码中

c++ - 离散傅立叶变换 C++ - 下一步做什么?

c++ - auto_ptr 到普通指针的转换

c++ - 第一个 C++ 库 : I am not sure where to reference and declare my variables

c++ - 如何组合任意谓词仿函数

c# - C# 和 C++ 之间可以传输什么类型的数据

c++ - 使用指针获取函数 C++ 的多个输出

java - 快速询问 : function that prints array of cells - should it be inside my cell class definition?