我必须根据用户输入创建特殊类型的矢量。 例如用户必须选择是否要创建一个int矢量或一个字符串矢量。 是否有可能预定义一个矢量并在一个例子中清楚地定义它。开关情况?
类似的东西:
vector<WILDCARD> vec;
switch(input) {
case 1:
vec = vector<int>()...
break;
case 2:
vec = vector<string>()....
break;
....
答案 0 :(得分:4)
是否可以预先定义一个矢量并在一个例子中清楚地定义它。开关情况?
没有。 C ++是一种静态类型的语言。这意味着,必须在编译时知道每个变量的类型,并且一旦知道它,就不能在以后更改 - 甚至在编译时也不会。所以你正在做的事情是不可能的。
如果您想让用户选择类型。然后,您可以在每个case
中定义所有可能选项的变量,并与用户选择的变量一起使用,如下所示:
switch(input) {
case 1:
{
std::vector<int> vec;
//work with vec which is vector of int!
}
break;
case 2:
{
std::vector<std::string> vec;
//work with vec which is vector of string!
}
break;
//....
或者,如果你担心代码重复,那么你可以这样做:
template<typename T>
void Work()
{
std::vector<T> vec;
//work with vec of type T
}
switch(input) {
case 1:
Work<int>();
break;
case 2:
Work<std::string>();
break;
//....
答案 1 :(得分:3)
不,你不能。
switch(input) {
case 1:
vector<int> vec1;
vec1 = ...
break;
case 2:
vector<String> vec2;
vec2 = ....
break;
....
答案 2 :(得分:2)
由于c ++是静态类型的,所以你不能这样做。 但我想boost::any或boost::variant会让您靠近您想去的地方。
答案 3 :(得分:0)
C ++是一种静态类型语言,因此vec
必须具有预定类型。
你可能想要做的是将你在vec
中使用的内容包装在一个对象中,也许是一个抽象基类,它没有提到矢量基类型是什么,还有两个子类,一个用于int
和string
一个。然后,您将使用虚函数来封装vector<int>
版本和vector<string>
版本之间的差异。