Jan*_*roň 3 c++ oop inheritance templates
如果我使用课程,一切都很好:
struct Base1 {
int value;
Base1(int value) : value(value) { }
};
struct Test1 : public Base1 {
int getValue() { return value; }
Test1(int value) : Base1(value) { }
};
Run Code Online (Sandbox Code Playgroud)
但是需要模板范围解析:
template <typename T>
struct Base {
T value;
Base(T value) : value(value) { }
};
template <typename T>
struct Test : public Base<T> {
typedef Base<T> parent;
T getValue() { return parent::value; } // why do I need to use parent:: here?
Test(T value) : parent(value) { }
};
Run Code Online (Sandbox Code Playgroud)
没有范围解析我收到错误'value' was not declared in this scope(使用gcc编译器).为什么?
因为编译器不知道它value依赖于模板参数.因此,它尝试在第一次传递期间(在实例化模板之前)解决它,并且失败.
这两个选项是使用范围分辨率,如您所拥有或使用this->value.由于this始终是从属名称,因此将强制在第二次传递期间进行评估.
编辑:至于为什么需要完成它:
虽然Test<T>源于Base<T>模板特化可以使Base<std::string>(例如)与正常完全不同Base<T>,并且没有名为成员value,或者它可以是不同类型或任何东西.通过强制它成为依赖名称,编译器必须等到它在检查之前知道所涉及的实际类型.