如何正确处理第三方POD

时间:2017-12-07 10:17:20

标签: c++ data-structures wrapper

我使用的是第三方库,其中大部分由POD结构组成。更重要的是,这些结构由一个特殊的库指针共享,由一个特殊的库工厂构建,因此它们以Ptr<APod>的形式出现。由于POD根据定义都是公开的,这导致它们在代码库周围进行修改,将代码分散到各处。我想找到一个更好的方法。我想将它们包装起来以使它们成为真正的类,以便关于这些数据的每个操作都被强制放在包装类中:

class Wrapper
{
public:
    Wrapper( /* params to correcly build APod */ );

    /** required when it needs to be sent back to the library **/
    const Ptr<APod>& unwrap() const;
private:
    Ptr<APod> m_data;
};

但是即使这对于大多数库POD都没问题,当POD具有由其他POD组成的字段时,或者当存在POD集合时(该库也具有其自己的Ptr的Vector),这有点棘手。到PODs)。另一个棘手的问题是,由于库只接受const Ptr<APod>&,这意味着指向非常量对象的常量指针,我的unwrap()方法仍然允许程序员在这些POD上拥有太多的自由。 我的方法可以改进吗?或者它是完全错误的,应该用另一种方法取代?

1 个答案:

答案 0 :(得分:0)

如果某些POD可以包含在其他POD或数组/容器中,这意味着您不应该自己尝试构建POD,而只是假设您从指向POD的指针或在案例中构建您的包装器您的特定图书馆Ptr<APod>

在不知道Ptr(唯一/共享/弱)的语义的情况下,我不能说你是否应该保留原始Ptr<APod>的副本或对它的引用。