我已启用用户选择他想要使用的数据类型,例如,如果他想使用long或double等。 我想首先声明变量的名称,然后设置其类型。在C ++中可以吗?
答案 0 :(得分:2)
如果我理解你的问题,你想这样做:
declare variable;
// in the program:
variable = (int) anotherVariable;
简短回答:
答案很长:
void *
就是这样做的,需要在解除引用之前将其显式转换为其他类型。但是对于不是void *
s的变量,这是不可能的。
void *variable = NULL;
int someIntVariable = 100;
int *someIntPointer = NULL;
variable = &someIntVariable;
someIntPointer = (int *)variable;
.. // but this seems unncessary.
答案 1 :(得分:0)
使用VARIANT
(如果您使用的是Windows)或其他平台上的类似内容。 VARIANT
的要点是它是一个能够存储各种数据类型的联合,但在给定时间只能存储1种特定类型。这样,您可以提前定义新的通用变量类型(VARIANT
),然后根据用户的选择在运行时调整其内部类型。
使用像VARIANT
这样的东西是有代价的,因为你在其上执行的每个操作都必须检查操作对于当前底层类型是否正确。 VARIANT
也使用更多内存,因为联合有自己的开销(详见定义)。
您可能希望将变量操作包装在类中以简化其用法。关于VARIANT
而不是void*
的好处是,它为您提供了更多的类型安全性,并且代码变得更具可读性。
编辑:正如另一个答案所指出的那样,boos::variant
就是出于此目的。
答案 2 :(得分:0)
请查看boost::variant
,或者,如果您只需要POD,请union
。但请记住,这会使许多事情变得复杂。
答案 3 :(得分:0)
enum VariantType {
USER_INT, USER_DOUBLE
};
union Variant {
int i;
double d;
}
int main() {
VariantType type;
Variant data;
type = getUserDataType();
switch(type) {
case USER_INT:
data.i = 42;
break;
case USER_DOUBLE:
data.d = 42.0;
break;
default:
break;
}
...或者使用一些现成的Variant implmementation。