c – 在基类中引用不同大小的std :: array而不是std :: array

c – 在基类中引用不同大小的std :: array而不是std :: array,第1张

概述我有以下问题.考虑这些课程 class face { virtual std::vector<ptr>& get_vertices(void) const = 0;};class triangle : public face {private: std::vector<ptr> vertices;public: std::vector<ptr>& get_vert 我有以下问题.考虑这些课程

class face {    virtual std::vector<ptr>& get_vertices(voID) const = 0;};class triangle : public face {private:    std::vector<ptr> vertices;public:    std::vector<ptr>& get_vertices(voID) const { return vertices; };};class quadrilateral : public face {private:    std::vector<ptr> vertices;public:    std::vector<ptr>& get_vertices(voID) const { return vertices; };};

显然,三角形和四边形将始终分别具有3和4个顶点.
因此,我想用适当大小的std :: array交换std :: vector,以节省由std :: vector中的三个附加指针引起的开销. (这是因为我将拥有数以百万计的面孔……)现在,是否有机会在std :: array面前有一个公共访问函数,就像上面的std :: vector一样?
使用标准C数组,我只需返回指向第一个数组条目及其大小的指针.是否有STL方式来做同样的事情或类似的事情?或者还有其他很好的方法来实现这个功能吗?

感谢阅读和可能的回答!!
安德烈亚斯

解决方法 std ::不同大小的数组是不同的类型,所以我看不到任何你想要的方法.但是,如果将begin()和end()const迭代器返回到内部容纳的容器或包含两者的小范围对象,该怎么办?这样您就可以将容器的大小与接口分离,并将其留给实现.

编辑:只是为了澄清,为了隐藏数据存储表示(在这种情况下,std :: array的大小),您将需要自己的face迭代器类.这很容易在指针方面实现,因为对于每个面专业化,您都知道底层数据结构的大小,开始和结束.但是显然你不能直接在界面中使用std :: array的begin()和end().

例:

这是一个快速而肮脏的示例,说明如何使用指针实现部分正向迭代器行为.我使用虚拟基类和OP中的一个实现作为起点.我也省略了所有构造函数,赋值运算符等.它还假设一个类Edge(可能是2D或3D点?).

class face {public:  typedef Edge* iterator;  typedef const Edge* const_iterator;  virtual iterator begin() = 0;  virtual const_iterator begin() const = 0;  virtual iterator end() = 0;  virtual const_iterator end() const = 0;  virtual size_t size() const = 0;  virtual ~face() {};};class triangle : public virtual face {public :  virtual iterator begin() {return m_edges.begin();}  virtual const_iterator begin() const {return m_edges.begin();}  virtual iterator end() {return m_edges.end();}  virtual const_iterator end() const {return m_edges.end();}  virtual size_t size() const {return m_edges.size();}private:    std::array<Edge,3> m_edges;

};

总结

以上是内存溢出为你收集整理的c – 在基类中引用不同大小的std :: array而不是std :: array全部内容,希望文章能够帮你解决c – 在基类中引用不同大小的std :: array而不是std :: array所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1213713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存