我想根据运行时条件调用同一类的不同构造函数。构造函数使用不同的初始化列表(:
之后的一堆内容),因此我无法在构造函数中处理条件。
例如:
#include <vector>
int main() {
bool condition = true;
if (condition) {
// The object in the actual code is not a std::vector.
std::vector<int> s(100, 1);
} else {
std::vector<int> s(10);
}
// Error: s was not declared in this scope
s[0] = 1;
}
我想我可以使用指针。
#include <vector>
int main() {
bool condition = true;
std::vector<int>* ptr_s;
if (condition) {
// The object in the actual code is not a std::vector.
ptr_s = new std::vector<int>(100, 1);
} else {
ptr_s = new std::vector<int>(10);
}
(*ptr_s)[0] = 1;
delete ptr_s;
}
如果我没有为我的班级编写移动构造函数,是否有更好的方法?
答案 0 :(得分:2)
另一种解决方案是创建一个类,默认的构造函数不会进行分配,计算(以及所有硬件工作),而是有一个函数,例如initialize
,并为每个构造函数类型重载它做真正的工作。
例如:
int main() {
bool condition = true;
SomeClass object;
if (condition) {
object.initialize(some params 1)
} else {
object.initialize(some params 2)
}
}
或者你可能希望默认构造函数做一些有意义的事情,在这种情况下,使一个构造函数接受某个“虚拟”类型的对象,例如DoNothing
而是:
SomeClass object(DoNothing())
答案 1 :(得分:1)
你不能按照
的方式做点什么std::vector<int> ptr_s;
if (condition) {
ptr_s.resize(100);
} else {
ptr_s.resize(10);
}