在向量中存储模板化对象(在单个向量中存储 Class、Class

2023-12-03

有一个模板类,就这样吧

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

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

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

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


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

话虽如此,我在我的一个项目中也有类似的需求,我最终通过继承和 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,并通过其中定义的公共接口访问它们(方法f)。底层类型T每个A对象在构造时指定。特定于该类型的所有其他实现细节T被隐藏。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在向量中存储模板化对象(在单个向量中存储 Class、Class) 的相关文章

随机推荐