假设我有以下层次结构:
// 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
。这是对的吗?
在我的特定情况下,我可以保证每个版本的Base
和Derived
都会被编译,并且他们都将拥有mPosition
。在Derived类中我只能使用mPosition
吗?