Я пытаюсь создать легкий шаблонный класс, имеющий статический член, инициализированный значением, указанным в качестве аргумента шаблона (разрешены только enum
).
Приведенный ниже код не создает поговорку
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;