【问题标题】:partial function template specialization偏函数模板特化
【发布时间】:2016-11-30 19:26:57
【问题描述】:

您好,我认为我在使用这种技术时遗漏了一些东西。试图遵循示例,但以下给了我一个错误: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;
}

【问题讨论】:

    标签: c++ templates partial-specialization


    【解决方案1】:

    您不能对单个成员函数使用部分模板特化 - 需要专门化整个类(但是,完全模板特化也可以)。

    【讨论】:

    • 那如何在不改变类接口的情况下解决呢?
    • 如何使用 enable_if_t 表达式来做到这一点?
    • @tomtom 如果isarmed==false,你的实现是什么?您可能可以将两者结合起来,根本不使用部分专业化。
    • 我不希望编译器编译这个函数以防 isarmed == false
    • 然后在非专业模板中使用你的实现,并在其中插入static_assert(isarmed,"Citizen must be armed!");。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多