在 Java 荒野中度过了太多时间之后,我对 C++ 有点陌生。
假设我有数据类 A 和 B 以及一个容器类,我将其称为 Container:
class A
{
public:
virtual void foo()
{
cout << "I am an A" << endl;
}
};
class B : public A
{
public:
void foo()
{
cout << "I am a B" << endl;
}
};
template <class T> class Container
{
public:
T *_t;
Container(T *t)
{
_t = t;
}
};
我想要的Java等价物看起来像
B b = new B();
Container<? extends A> aContainer = new Container<B>(b);
这应该如何在 C++ 中完成?这甚至是规范的吗?
以下代码给出了编译错误:
B *b = new B();
Container<A> *aContainer = new aContainer<B>(b);
到目前为止,谷歌在寻找“?扩展”的等价物方面一直没有帮助。
== 编辑 ==
解决方案是重写我的代码,以便不需要“?扩展”,如下面的 Isaac Drachman 所述。