gpt4 book ai didi

c++ - 根据可用的参数使用一个或另一个重载的创建者

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:55 24 4
gpt4 key购买 nike

我有一个对象的两个构造函数,它们使用两组不同的数据。

myclass myobject(set 1);
myclass myobject(set 2);

set 1set 2 是不同的类型。

我想使用构造函数 1 或构造函数 2 创建一个名为 myobject 的 myclass 对象,具体取决于此时可用的参数集,然后在 if 语句之外使用 myobject。

if(set1)
myclass myobject(set 1);
else
myclass myobject(set 2);
myobject.operation();

谁能告诉我这样做的好方法?

最佳答案

如果默认构造和复制(或移动)分配很便宜,只需使用:

myclass myobject;
if (set1)
myobject = myclass(1, 2);
else
myobject = myclass(3);
myobject.operation();

如果在堆上分配东西是可以接受的,使用指针:

std::unique_ptr<myclass> myobject;
// const std::auto_ptr<myclass> in C++03 (it's fine as long as you keep it unique)
if (set1)
myobject.reset(new myclass(1, 2));
else
myobject.reset(new myclass(3));
myobject->operation();

如果您必须在堆栈上分配它,除了使用 placement new(或更改构造函数以接受这两种可能性)之外,我无论如何都看不到。

#include <new>

char myobject_buffer[sizeof(myclass)];
myclass* ptr;
if (set1)
ptr = new (myobject_buffer) myclass(1, 2);
else
ptr = new (myobject_buffer) myclass(3);
ptr->operation();
...
ptr->~myclass(); // <-- use RAII to call this for exception safety

关于c++ - 根据可用的参数使用一个或另一个重载的创建者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226221/

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