C++使用指向模板对象的指针

发布于 2024-10-18 15:06:47 字数 284 浏览 1 评论 0 原文

我有一个名为 ABC 的类,它有一个类模板:

template <class T> class ABC{}

在另一个类中,我尝试将对象 ABC 存储在列表中:

class CDE{
private:
  list<ABC *> some_list; 
}

我打算存储可能具有不同类模板参数的 ABC 对象。即使是指针,在编译时是否也需要指定模板?如果容器要存储不同类型的对象怎么办?那不可能吗?

I have a class named ABC which has a class template:

template <class T> class ABC{}

In another class I am trying to store of objects ABC in a list:

class CDE{
private:
  list<ABC *> some_list; 
}

I intend to store objects of ABC which might have different class template parameters. Is it necessary to specify template even for a pointer at compile time? What if the container is supposed to store objects of different type? Is that not possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北笙凉宸 2024-10-25 15:06:47

即使是指针,在编译时是否也需要指定模板?

是的。

如果容器要存储不同类型的对象怎么办?这不可能吗?

这是不可能的。

不存在 ABC 类这样的东西。只有 ABC 的实例,例如 ABCABC。这些是完全不同的类。

你可以这样做:

template<typename T>
class ABC : public ABC_Base
{
  ...
}

list<ABC_Base*> some_list;

通过这样做,你所有的 ABC 实例化都有一个共同的基类型,并且你可以任意使用基指针。

Is it necessary to specify template even for a pointer at compile time ?

Yes.

What if the container is supposed to store objects of different type ? Is that not possible ?

It is not (directly) possible.

There is no such thing as the class ABC. There are only instantiations of ABC, such as ABC<Foo> and ABC<Bar>. These are completely different classes.

You can do something like:

template<typename T>
class ABC : public ABC_Base
{
  ...
}

list<ABC_Base*> some_list;

By doing this, all of your ABC instantiations have a common base type, and you can use a base pointer arbitrarily.

一向肩并 2024-10-25 15:06:47

您需要在 CDE 类中指定模板参数,或者也将 CDE 设为模板。

第一个选项:

class CDE {
private:
    list< ABC<int>* > some_list;
};

第二个选项:

template <class T>
class CDE {
private:
    list< ABC<T>* > some_list;
};

You need to either specify the template parameters in your CDE class, or make CDE a template as well.

First option:

class CDE {
private:
    list< ABC<int>* > some_list;
};

Second option:

template <class T>
class CDE {
private:
    list< ABC<T>* > some_list;
};
和我恋爱吧 2024-10-25 15:06:47

该列表只能存储单一类型。模板的不同实例是不同的类型。如果这令人满意,您可以这样做:

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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文