<分区>
考虑一个具有删除的默认构造函数的类(我的实际类要复杂得多,默认构造函数被隐式删除,因为它的一个成员具有删除的默认构造函数)。我想根据一些输入的值用它的一个构造函数实例化我的类,然后做“一堆事情”。 以下代码显示了由于代码注释中所述的原因而无法完成的两种方法,但给出了我正在尝试实现的目标的想法。
#include <vector>
class A {
bool m_with_v;
int m_i;
std::vector<double> m_v;
public:
A() = delete;
A(int i) : m_i(i), m_with_v(false) {}
A(int i, std::vector<double> v) : m_i(i), m_v(v), m_with_v(true) {}
auto do_stuff() { /* do stuff depending on m_with_v */ };
};
int main(int argc, char* argv[])
{
bool yes_no;
/* Obtain a value for yes_no from argv */
A a; // the default constructor of "A" cannot be referenced -- it is a deleted function
if (yes_no)
a = A(1);
else {
std::vector<double> v{ 1,2,3 };
a = A(1, v);
}
a.do_stuff();
// do a bunch more things
if (yes_no)
A b(1);
else {
std::vector<double> v{ 1,2,3 };
A b(1, v);
}
b.do_stuff(); // identifier "b" is undefined, i.e. it's gone out of scope
// do a bunch more things
}
一个明显的方法是将“一堆东西”移动到 if
block 的每个部分内,但这会导致大量重复代码,我想避免这种情况.
另一种明显的方法是创建一个函数来执行“一堆事情”并在 if
block 的每个部分调用它,但这需要一定数量的重构和函数调用如果有大量变量需要传递给它,可能会变得相当丑陋。
所以,我的问题是:是否有某种方法可以有条件地实例化我的类并使其在周围范围内可用?