【发布时间】:2019-07-04 21:51:19
【问题描述】:
我在C++ 中遇到了以下程序:
template <class T>
class Foo {
Foo() {};
friend T;
};
class Bar : public virtual Foo<Bar> {
void doPrivateStuff();
public:
template<typename T>
void baz(T a) { cout << a << endl; }
};
它说使用这种方式不可能从Bar继承。我有两个问题:
- 是什么让编译器不允许从
Bar继承? - 我可以虚拟继承吗?
- 我知道
friend是用来声明可以访问类的私有字段和方法的方法或者类,但是friend T是什么意思呢?
它基于以下页面:
【问题讨论】:
-
你能告诉我们编译器的信息吗?
-
@AndyG -- 现在尝试在
main()中实例化“Baz baz;”,看看会发生什么。 -
@AndyG 尝试声明一个构造函数。我猜是因为
bar是一个模板类,在使用之前它不会初始化它,这就是你的示例编译的原因。
标签: c++ templates inheritance