C++ 有没有办法先声明变量名,然后再声明类型

C++ 有没有办法先声明变量名,然后再声明类型,c++,types,casting,void,C++,Types,Casting,Void,我已经允许用户选择他想要使用的数据类型,例如,如果他想要使用long或double等。 我想先声明变量的名称,然后设置它的类型。C++中是否有可能?< p>如果我正确地理解了你的问题,你想这样做: declare variable; // in the program: variable = (int) anotherVariable; 简短答复: 不 长答覆: 一个void*就是这样做的,它需要在取消引用之前显式地转换为不同的类型。但这在非void*s的变量上是不可能的 void *var

我已经允许用户选择他想要使用的数据类型,例如,如果他想要使用long或double等。
我想先声明变量的名称,然后设置它的类型。C++中是否有可能?

< p>如果我正确地理解了你的问题,你想这样做:

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.
研究一下在其他平台上使用(如果你在Windows上)或类似的东西。
VARIANT
的要点在于,它是一个联合体,能够存储所有类型的数据,但在给定时间只能存储一种特定类型的数据。通过这种方式,您可以提前定义新的通用变量类型(
VARIANT
),然后根据用户的选择在运行时调整其内部类型

但是,使用类似于
VARIANT
的操作是有代价的,因为您对它执行的每个操作都必须检查该操作对于当前基础类型是否正确<代码>变量也会使用更多内存,因为联合有自己的开销(有关详细信息,请参见定义)

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

编辑:另一个答案指出,
boos::variant
就是为了这个目的。

看看,或者,如果你只需要pod,
union
。但是请记住,这会使许多事情复杂化

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

…或使用一些现成的变型隐含。< /P>如果我正确地知道,那么在C++世界中是不可能的。类型是编译时构造。它们在您的程序编译后并不存在,并且在运行时无法更改。为什么需要这样做?为什么不在用户做出选择后创建一个适当类型的变量呢?你能澄清一下吗?@TylerM。Java中是否有类似于数字类的类,它是任何数字(包括双精度和整数)的超类型?我不能认为它给出了10倍的代码。@RobertKilar是的,

boost::variant
variant
几乎可以做到这一点。