[英]template inheritance and member access
我有以下简单的代码:
template <typename T>
struct base
{
std::vector<T> x;
};
template <typename T>
struct derived : base<T>
{
void print()
{
using base<T>::x; // error: base<T> is not a namespace
std::cout << x << std::endl;
}
};
当我编译代码(使用GCC-4.7.2)时,收到上面注释中看到的错误。
我在这里阅读: http : //gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Name-lookup.html#Name-lookup
using base<T>::x
必须包含在内以引入基类的范围。 任何想法有什么问题吗? 先感谢您!
将using
声明放在类定义中,而不是在函数主体中:
template <typename T>
struct derived : base<T>
{
using base<T>::x; // !!
void print()
{
std::cout << x << std::endl;
}
};
(当然, 您有责任确保您的std::vector
实际上存在operator<<
重载,例如,使用漂亮的打印机 。)
如果您明确地说x
是成员,则也可以使其工作:
template <typename T>
struct base
{
std::vector<T> x;
base() : x(1) {}
};
template <typename T>
struct derived : base<T>
{
void print()
{
std::cout << this->x[0] << std::endl;
}
};
int main()
{
derived<int> d;
d.print();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.