使用模板的子类中的父类成员,没有`this`

时间:2016-07-17 14:37:15

标签: c++ templates c++11

假设我有以下层次结构:

// the template of the class isn't important for
// the question, I'm using an enum in the real code
enum class State : int { S0, S1 /*... etc */ };

template<State S>
class Base {
public:
    Base(const Vector3f &position) : mPosition(position) {}
protected:
    Vector3f mPosition;
};

template<State S>
class Derived : public Base<S> {
public:
    Derived(const Vector3f &position) : Base<S>(position) {
        // vvvvvvvvv ERROR
        if(mPosition.norm() > 2.0f) { /* do stuff */ }
};

我知道我可以使用this->mPosition以及Base<S>::mPosition,但我不明白为什么。如果没有涉及模板,它将编译。

我认为这是因为在编译时没有证据证明所有可能的Base<State S>特化(如果存在)将具有mPosition。这是对的吗?

在我的特定情况下,我可以保证每个版本的BaseDerived都会被编译,并且他们都将拥有mPosition。在Derived类中我只能使用mPosition吗?

0 个答案:

没有答案