你能告訴我爲什麼這個代碼不能編譯?編譯錯誤 - 模板,enable_if
template <typename T, T minAge, T maxAge, bool isarmed,
typename = std::enable_if_t<std::is_arithmetic<T>::value>>
class Citizen {
public:
Citizen(T health, T age);
Citizen(T health, T age, T attackPower);
T getHealth() const { return _health; };
T getAge() const { return _age; };
T getAttackPower();
void takeDamage(T damage);
private:
T _health;
T _age;
T _attackPower;
};
template <typename T, T minAge, T maxAge, bool isarmed>
Citizen<T, minAge, maxAge, isarmed>::Citizen(T health, T age):
_health (health),
_age (age)
{
static_assert(minAge <= maxAge, "Wrong age");
assert(minAge <= this->_age && this->_age <= maxAge);
}
我錯過了什麼?
error: invalid use of incomplete type ‘class Citizen<T, minAge, maxAge, isarmed>’
如果我沒有弄錯,SFINAE是用於重載功能模板的解析。我不認爲你可以將它用於類模板。 –
@RSahu當然可以。這是[如何'void_t'工程](http://stackoverflow.com/q/27687389/2069064) – Barry
@巴里,感謝您的鏈接。對於SFINAE,我還沒有得到我的基礎知識。 –