只为NOT STATIC类的EACH对象调用一次方法
Call method only once for EACH object of the class NOT STATIC
我写了一个类,其中构造函数是私有的。
我只需要将给定的值分配给私人成员一次
在方法CCD_ 1中。
它应该类似于构造函数,但不是构造函数!
每当在第一次之后调用该CCD_ 2时,我不需要将任何东西重新分配给那个特定的OBJECT。
如何在没有任何布尔值的情况下实现这一点?
我想到了boost::call_once
,但它为整个课堂调用了construct(int a)
一次!并且我需要为每个对象调用此函数一次。
就像克托一样!有什么想法吗?
更新1:构造函数是私有的。但是类有一些成员,这些值可以从外部分配,但只能分配一次
我正在尝试在不使用bool wasCalled
或类似的东西的情况下实现一些自动化,以检查是否已经调用了函数。
更新2:
LT::Pointer lut = LT::New();
std::vector<double> points;
....
lut->construct(points);
第二次
lut->construct(points);
被称为-应该给出错误,或者只是以某种方式使其不可能。
直接回答:
您可以设计一个包装器,将"一次性分配"语义应用于被包装的对象。
但是,您可以而不是让编译器在编译时检测到第二次设置值,因此您应该准备好让它在运行时断言/抛出。
背景/环视
正如其他人所说,这闻起来很像是一个设计缺陷。为什么不能使用New
操作前向构造函数参数(a-lamake_shared
,make_unique
?):
template <typename T, typename... Args>
SmartPointer<T> genericNew(Args&&... args) {
return SmartPointer<T>(new T(std::forward<Args>(args)...));
}
当然,也可以有专门的工厂方法,甚至知道如何在施工后设置私人财产。让工厂方法成为朋友,以防止其他人使用工厂创建后的隐藏属性(setters):
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;
};
(在这里,我选择将construct(int a)
0工厂方法作为静态成员,因此它隐含地是一个朋友)
相关文章:
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 访问随机图像像素的快速方法,最多一次
- 只设置一次方法中变量的值
- cppUnit:针对多个测试方法执行一次的设置函数
- 是否有一种方法可以在运行时停止循环重复一次不止一次
- 快速简单的方法,以C++为单位一次读取一个字节的 stdin
- 最简单的方法使多个指针一次指向同一位置,一次只处理2个位置
- C++菱形问题 - 如何仅调用一次基方法
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 当Bool值在UPDATE()方法中更改时,只有一次呼叫函数
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- 有没有一种优雅的方法,根据用户输入只决定一次
- 如何确保方法在该对象的生存期内仅执行一次?
- 在方法中构造一个std:映射一次
- 只为NOT STATIC类的EACH对象调用一次方法
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- C++将节点添加到链表的开头一次后失败.其他方法也有问题
- QTimer 每秒执行一次方法
- 如何只执行一次方法代码,尽管每帧调用一次
- 从类中只调用一次方法