c++ - 具有枚举的模板无法使用 POD 模板参数值初始化其成员

标签 c++ templates static initialization

我正在尝试创建一个轻量级模板类,该类具有一个静态成员,该成员使用作为模板参数提供的值进行初始化(仅允许 enum)。

下面的代码没有构建 saying

   error: wrong number of template arguments (1, should be 2)
   error: provided for ‘template<field_id field_value, 
   inner_type_id innter_type_value>     struct node’
   error: template declaration of ‘field_id m_field_id’

问题似乎是第一个模板参数。如果我删除 'field_value' 和 'inneer_type_value' 仍然没有构建说不匹配错误。

你能帮帮我吗? 感谢 AFG

   enum field_id{ FIELD_ID_1, FIELD_I_2  };
   enum inner_type_id{ INN_ID_1, INN_ID_2  };

    template< enum field_id  field_value
            , enum inner_type_id inner_type_value 
    >struct node{
            static field_id m_field_id;
    };

    template< 
            enum field_id  field_value
            ,enum inner_type_id inner_type_value 
    >
    enum field_id node<
            enum field_id field_value
            ,enum inner_type_id inner_type_value
    >::m_field_id=field_value;

    int main(){
           node<FIELD_ID_1,INN_ID_1> obj;
           assert( obj::m_field_value == FIELD_ID );
    }

我也在尝试另一种不同的方法,但我还是不明白

         template< typename T1, typename T2 >
         struct node;

         template<>
         struct node< enum field_id=FIELD_ID_1, enum inner_type_id=INN_ID_1>{
              static enum field_id m_field_id;
         };             
         note< 
               enum field_id=FIELD_ID_1
              ,enum inner_type_id=INN_ID_1
              >::m_field_id=FIELD_ID1;

最佳答案

enum 关键字不能出现在模板中 - 只需使用类型名称:

template<field_id field_value, inner_type_id inner_type_value> struct ...

关于c++ - 具有枚举的模板无法使用 POD 模板参数值初始化其成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7175316/

相关文章:

c++ - msvc 和 gcc 不同的行为

java - 为什么我不能调用非静态变量?

java - 关于相互扩展的类中的重写方法的问题。

c# - 为什么静态自动属性仅在 getter 是公共(public)的而 setter 是私有(private)的情况下才有用

c++ - 在 DWARF 信息中,DW_OP 寄存器的确切含义是什么?

c++ - 右值引用的生命周期

c++ - C++11中函数参数的显式模板函数参数规范和隐式转换

c++ - 无法从另一个模板类调用模板类的模板成员函数

c++ - 得到错误的输出

c++ - 在 C++ 中尽可能使用 const?