2013-03-10 78 views
-2

我有使用户选择他想使用的数据类型,例如,如果他想使用长或双等。 我想首先声明变量的名称,然后设置其类型。在C++中可能吗?有没有什么办法来声明变量的名称,然后类型

+0

如果我找到了你,那么在C++世界中是不可能的。 – varnie 2013-03-10 12:53:45

+0

类型是编译时构造。在程序编译完成后,它们并不存在,并且在运行时无法更改。 – 2013-03-10 12:56:18

+1

你为什么需要这样做?为什么不在用户做出选择后创建适当类型的变量?你能澄清吗? – 2013-03-10 12:56:21

回答

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. 
0

考虑使用VARIANT(如果你在Windows上)或其他平台上类似的东西。 VARIANT的要点在于它是一个能够存储各种数据类型的联合,但在给定时间只能存储一种特定类型的数据。这样,您可以提前定义一个新的通用变量类型(VARIANT),然后根据用户的选择在运行时调整其内部类型。但是,使用诸如VARIANT之类的东西的代价是,因为您在其上执行的每个操作都必须检查操作对于当前基础类型是否正确。 VARIANT也使用更多的内存,因为联合有其自己的开销(详见定义)。

您可能希望在类中包装变体操作以简化其使用。关于VARIANT而不是void*的好处在于,它为您提供了更多的类型安全性,并且代码变得更加可读。

编辑:作为另一个答案指出,boos::variant是为此目的。

0

看一看boost::variant,或者,如果您只需要POD,union。但请记住,这使许多事情变得复杂。

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; 
} 

...或使用一些准备好的变体implmementation。

相关问题