繁体   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