C++使用指向模板对象的指针
我有一个名为 ABC 的类,它有一个类模板:
template <class T> class ABC{}
在另一个类中,我尝试将对象 ABC 存储在列表中:
class CDE{
private:
list<ABC *> some_list;
}
我打算存储可能具有不同类模板参数的 ABC 对象。即使是指针,在编译时是否也需要指定模板?如果容器要存储不同类型的对象怎么办?那不可能吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的。
这是不可能的。
不存在 ABC 类这样的东西。只有 ABC 的实例,例如
ABC
和ABC
。这些是完全不同的类。你可以这样做:
通过这样做,你所有的 ABC 实例化都有一个共同的基类型,并且你可以任意使用基指针。
Yes.
It is not (directly) possible.
There is no such thing as the class ABC. There are only instantiations of ABC, such as
ABC<Foo>
andABC<Bar>
. These are completely different classes.You can do something like:
By doing this, all of your ABC instantiations have a common base type, and you can use a base pointer arbitrarily.
您需要在
CDE
类中指定模板参数,或者也将CDE
设为模板。第一个选项:
第二个选项:
You need to either specify the template parameters in your
CDE
class, or makeCDE
a template as well.First option:
Second option:
该列表只能存储单一类型。模板的不同实例是不同的类型。如果这令人满意,您可以这样做:
template; class CDE{ private: list; *>一些_列表; 如果您需要使用不同的
类型,也许您可以为 ABC 创建一个非模板基类并存储指向该基类的指针。 (即使用接口)
The list can only store a single type. Different instantiations of a template are different types. If this is satisfactory, you can do it like this:
template <class T> class CDE{ private: list<ABC<T> *> some_list; }
If you need to use different types, perhaps you could create a non-template base class for ABC and store pointers to that. (ie. use an interface)