簡體   English   中英

對類NOT STATIC的每個對象僅調用一次方法

[英]Call method only once for EACH object of the class NOT STATIC

我寫了一個構造函數是私有的類。

我只需要一次將給定值分配給私有成員

在方法construct(int a)

它應該像構造函數,而不是構造函數!

第一次之后每次調用此construct(int a)時,我都不需要為該特定對象重新分配任何內容。

如何在沒有布爾值的情況下實現這一目標?

我想到了boost::call_once但它為整個類調用一次一次construct(int a) 我需要為每個對象調用一次此函數。

就像ctor! 有任何想法嗎?

更新1:構造函數是私有的。 但是該類有一些成員,這些值可以從外部分配,但只能一次

我正在嘗試實現一些自動化,以檢查是否使用bool wasCalled類的函數是否已被調用。

更新2:

LT::Pointer lut = LT::New();
    std::vector<double> points;
....
    lut->construct(points);

第二次

lut->construct(points);

被稱為-應該給出錯誤,或者以某種方式使其無法執行。

直接回答

您可以設計一個將“一次分配”語義應用於包裝對象的包裝器。

但是,您不能使編譯器在編譯時檢測到第二次設置值,因此您應該准備在運行時聲明/拋出該值。

背景/環顧四周

正如其他人所說,這聞起來很像是設計缺陷。 為什么不能使用New操作轉發構造函數參數(a-la make_sharedmake_unique ?):

template <typename T, typename... Args>
    SmartPointer<T> genericNew(Args&&... args) {
         return SmartPointer<T>(new T(std::forward<Args>(args)...));
    }

當然,可能會有專門的工廠方法,甚至在建造后都知道如何設置私有財產。 在工廠創建后,使工廠方法成為朋友,以防止他人使用隱藏的屬性(setter):

struct X { 
     int a; 
     X(int i) : a(i) {}

     typedef SmartPointer<X> Ptr;

     static Ptr New(int a, int init_only) {
         Ptr p(new X(a));             
         p->init_only = init_only;
         return p;
     }

   private:
     int init_only;
};

(在這里,我選擇使New factory方法成為靜態成員,因此它暗中是朋友)

暫無
暫無

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

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