gpt4 book ai didi

c++ - 编译错误 - 模板,enable_if

转载 作者:行者123 更新时间:2023-11-30 02:28:18 25 4
gpt4 key购买 nike

你能告诉我为什么这段代码不能编译吗?

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>’

最佳答案

您将 Citizen 声明为带有 5 个模板参数的类模板:

template <typename T, T, T, bool, typename >
class Citizen { ... };

然后尝试仅使用 4 个模板参数来定义构造函数:

template <typename T, T minAge, T maxAge, bool isarmed>
Citizen<T, minAge, maxAge, isarmed>::Citizen(T health, T age)

没有这样的先前声明的 4-template-parameter Citizen,因此出现错误。您仍然需要最后一个模板参数。


请注意,这里的 SFINAE 没有多大意义,除非您有一些其他非算术 Citizen 类模板(它本身没有多大意义)。只需为 T 设置一个 static_assert 作为算术类型即可。

关于c++ - 编译错误 - 模板,enable_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40895523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com