pimpl-idiom

    0熱度

    2回答

    試想一個典型PIMPL方法的實現: class ObjectImpl; class Object { Object(ObjectImpl* object_impl) : _impl(object_impl); private: ObjectImpl* _impl; }; 我正在尋找一種方法可以重複使用相同的實現包裝類型T這兩種的ObjectImpl或

    0熱度

    1回答

    我在使用cereal時遇到了PIMPL慣用語的麻煩。 這是一個小例子: b.h #ifndef _B_H_ #define _B_H_ #include <memory> #include "cereal/types/memory.hpp" #include "cereal/archives/json.hpp" struct BImpl; class B { public:

    3熱度

    2回答

    我有一些的3rdParty庫這樣的方法: bool Invoke(const char* method, Value* args, size_t nargs) 它需要其內類型的數組(可轉換至任何原語C++類型)和Arg計數作爲其內PARAMS。 在我的代碼,我寫了一些通用的輔助,以避免每個調用手動創建和類型的皈依: template<class ... Args> bool WrappedV

    2熱度

    1回答

    我的一個隊友經常使用的PIMPL的變化,他確實是這樣的: 了foo.h: namespace { struct Impl; } class Foo { public: Foo(); ~Foo(); void Bar(int n); /* ... */ private: std::unique_ptr<Impl> _impl; };

    -1熱度

    1回答

    我想了解一個來自「api設計爲c + +」書(p。70)的疙瘩示例。 // autotimer.h class AutoTimer { public: explicit AutoTimer(const std::string &name); AutoTimer(); // allow access from other classes/functions in

    2熱度

    2回答

    我讀這個答案霍華德Hinnant(Is std::unique_ptr<T> required to know the full definition of T?),然後這個答案(How is a template instantiated?),我只是在想。如果你有像這樣 class Something { Something(); ~Something(); cla

    4熱度

    1回答

    我正在閱讀Scott Meyers的Effective Modern C++,他在討論使用pimpl成語並指向unique_ptr的實現類,但存在特殊成員函數的問題(例如作爲析構函數)要求類型完整。這是因爲unique_ptr的默認刪除程序在使用delete p之前會靜態聲明要刪除的類型是否已完成。因此,必須在實現文件中定義該類的任何特殊成員函數(而不是由編譯器生成),之後的實現類已定義。 在本章

    0熱度

    1回答

    只要我不將構造函數的定義(B)移動到標頭B.h,代碼就會工作。 B.h class Imp; //<--- error here class B{ public: std::unique_ptr<Imp> imp; B(); //<--- move definition to here will compile error ~B(); ////

    1熱度

    2回答

    這是簡化代碼只是爲了顯示我的問題: 的main.cpp #include "one.hpp" #include <iostream> int main(){ One one; std::cout << one.two->val; } one.hpp: struct Two; <- forward declare Two struct One{ One(); ~One() {

    0熱度

    1回答

    我儘量讓PIMPL模式: //header #include <memory> class Table { public: Table(); private: class Impl; std::unique_ptr<Impl> *m_impl; }; //source #include <vector> #include "table.hpp"