有一个模板类,就这样吧
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(使用前将#替换为@)