2016-11-30 10 views
0

Привет, я думаю, что я что-то упустил с помощью этой техники. Попробовал следовать примерам, но следующие дает мне сообщение об ошибке: invalid use of incomplete type ‘class Citizen<T, minAge, maxAge, true>’частичная функция шаблон специализация

template <typename T, T minAge, T maxAge, bool isarmed> 
class Citizen { 
public: 

    Citizen(T health, T age); 
    Citizen(T health, T age, T attackPower); 
    T getAttackPower(); 

private: 
    T _health; 
    T _age; 
    T _attackPower; 
}; 

template <typename T, T minAge, T maxAge> 
T Citizen<T, minAge, maxAge, true>::getAttackPower() { 
    return _attackPower; 
} 

ответ

2

Вы не можете использовать частичную шаблонную специализацию для одной функции члена - нужно специализироваться весь класс вместо (однако, полная специализация шаблона будет хорошо).

+0

Затем, как это сделать, без изменения интерфейса класса? – tomtom

+0

Как это сделать, используя выражение enable_if_t? – tomtom

+0

@tomtom Какова ваша реализация в случае 'isarmed == false'? Вы, вероятно, могли бы объединить оба, и не использовать частичную специализацию вообще. – Eugene