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

Is there any way to declare the name of the variable then the type

本文关键字:声明 然后 类型 变量名 有没有      更新时间:2023-10-16

我已经允许用户选择他想使用的数据类型,例如,如果他想使用长或双等。我想先声明变量的名称,然后设置它的类型。在c++中可能吗?

如果我对你的问题理解正确,你想这样做:

declare variable;
// in the program:
variable = (int) anotherVariable;

简短的回答:<标题>没有

长答:

a void *正是这样做的,在解引用之前需要显式地将其转换为不同的类型。但对于非void * s的变量,这是不可能的。

void *variable = NULL;
int someIntVariable = 100;
int *someIntPointer = NULL;
variable = &someIntVariable;
someIntPointer = (int *)variable;
.. // but this seems unncessary.

看看boost::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;
}

…或者使用一些现成的变体实现。

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

使用像VARIANT这样的东西是有代价的,因为你对它做的每一个操作都必须检查操作是否对当前底层类型是正确的。VARIANT还使用更多的内存,因为联合有自己的开销(详细信息请参见定义)。

您可能希望在类中包装各种操作以简化其使用。与void*相比,VARIANT的好处是它提供了更多的类型安全,代码变得更可读。

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