簡體   English   中英

如何正確處理第三方POD

[英]How to correctly handle 3rd party POD

我正在使用一個第三方庫,該庫大部分由POD結構組成。 甚至,這些結構是由特殊的庫指針指向的共享,並由特殊的庫工廠構建,因此它們以Ptr<APod>的形式來來去去。 由於POD按定義是全部公開的,因此導致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集合時(庫也具有自己的POd到POD的向量),這還是有些棘手的。 。 另一個棘手的事情是,由於該庫僅接受const Ptr<APod>& ,這意味着恆定指向非恆定對象的指針,因此我的unwrap()方法仍然允許程序員在這些POD上擁有太大的自由度。 我的方法可以改善嗎? 還是完全錯誤,應該用另一種方法代替?

如果某些POD可以包含在其他POD或數組/容器中,則意味着您永遠不要嘗試自己構建POD,而只是假設您是通過指向POD的指針或特定情況構建的包裝器。庫一個Ptr<APod>

在不了解Ptr (唯一/共享/弱)的語義的情況下,我無法說出您是否應該保留原始Ptr<APod>的副本或對其的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM