【发布时间】:2013-11-14 18:39:47
【问题描述】:
在 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);
到目前为止,Google 在寻找“?extends”的等价物方面一直没有帮助。
== 编辑 ==
解决方案是重写我的代码,这样就不需要“?扩展”,如下面的 Isaac Drachman 所述。
【问题讨论】:
-
你能提供一个
aContainer的用例吗? -
我不认为你可以在 C++ 中拥有这样的东西。另外,避免裸指针,改用智能指针(否则你需要手动释放它们)
-
最接近您的代码的是;
B b = B(); Container<B> bContainer = aContainer<B>(b); A* a = bContainer._t; -
您必须等待
concepts被添加:isocpp.org/blog/2013/02/… -
@YuliaV 这里的好建议是:完全避免使用指针。使用静态分配。
标签: java c++ templates generics inheritance