gpt4 book ai didi

c++ - 仅对类 NOT STATIC 的每个对象调用方法一次

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:58 25 4
gpt4 key购买 nike

我写了一个构造函数是私有(private)的类。

我只需要将给定值分配给私有(private)成员一次

在方法 construct(int a) 中。

它应该是构造函数而不是构造函数!

每次 construct(int a) 第一次调用后,我不需要为那个特定的对象重新分配任何东西。

如何在没有任何 bool 值的情况下实现这一点?

我想到了 boost::call_once 但它为整个类调用了一次 construct(int a)!我需要调用此函数 ONCE for EACH OBJECT

就像ctor!有什么想法吗?

更新 1:构造函数是私有(private)的。但是该类有一些成员可以从外部分配这些值,但只能分配一次

我试图在不使用 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)...));
}

当然,可以有专门的工厂方法,甚至知道如何在构造后设置私有(private)属性。使工厂方法成为 friend ,以防止其他人使用工厂创建后的隐藏属性(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 工厂方法成为静态成员,所以它隐含地是一个 friend )

关于c++ - 仅对类 NOT STATIC 的每个对象调用方法一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22203513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com