【发布时间】:2017-07-19 18:22:52
【问题描述】:
我想根据运行时条件调用同一类的不同构造函数。构造函数使用了不同的初始化列表(: 之后的一堆东西),所以我无法在构造函数中处理条件。
例如:
#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;
}
如果我不为我的类编写移动构造函数,有没有更好的方法?
【问题讨论】:
-
但它不是 std::vector。这是我写的一门课。这只是一个例子。
-
恕我直言。那为什么要以
std::vector为例。它显然具有可以使这项任务轻松完成的方法。无论如何,您的 real 类是否支持移动分配或交换? -
@WhozCraig:我想我在某处看到了类似使用三元运算符的东西,但我不确定。不,这个类是一堆类的组合,其中大多数没有移动构造函数。
-
嗯,是的,三元运算符(在此示例中使用 两次)可以工作。读起来会有点神秘,但可以肯定。
std::vector<int> v((condition?100:10), (condition?1:0));。你的同事会因此恨你,顺便说一句,老实说,重新考虑这个。 -
在您的示例中,您正在调用相同的构造函数,但使用不同的值,这种情况比使用不同的构造函数更容易,因为您可以将要在构造函数中传递的值保存在一些临时变量中和之后if else 语句构造你的对象。
标签: c++ constructor