gpt4 book ai didi

c++ - 在 vector 中存储模板化对象(Storing Class, Class in a single vector)

转载 作者:太空狗 更新时间:2023-10-29 22:54:43 25 4
gpt4 key购买 nike

有一个模板类,让它成为

template<typename T> class A { std::vector<T> data; };

我在这里面临的问题是,用户可以创建此类的多种类型,但我需要跟踪它们,最好的情况是我在另一个 vector 中引用了这些对象,但这不会起作用,因为所有类型都是不同的。你能推荐一个可以封装这个的好的设计模式吗?

我可以存储指针然后对其进行类型转换,但这并不优雅。

如果提供的解决方案足够好,我也可以更改架构。我要解决的基本问题是,我有一类自定义类型的 vector ,我该如何存储它们。

最佳答案

正如之前的评论所述 - 您首先需要确保这是您所需要的。

话虽如此,我在我的一个项目中也有类似的需求,我最终通过继承和PIMPL解决了,如下:

class A{
private:
struct Abstract {
virtual void f() = 0;
};

template <typename T>
struct Implementation : public Abstract {
std::vector<T> data;
virtual void f() {...}
};

std::unique_ptr<Abstract> impl;

public:
template <typename T>
A(): impl(std::make_unique<Implementation<T> >()){}

void f() {impl->f();}
};

这允许您创建类型为 A 的对象的容器,并通过其中定义的公共(public)接口(interface)(方法 f)访问它们。每个 A 对象的基础类型 T 在构造时指定。特定于类型 T 的所有其他实现细节都被隐藏。

该解决方案受到虚函数固有开销的影响。我不确定它与 std::any 方法的性能相比如何。

关于c++ - 在 vector 中存储模板化对象(Storing Class<int>, Class<double> in a single vector),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54454874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com