-2

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

4

4 回答 4

2

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

declare variable;

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

简短的回答:

长答案:

avoid *正是这样做的,它需要在取消引用之前显式转换为不同的类型。但这对于不是 s 的变量是不可能void *的。

void *variable = NULL;
int someIntVariable = 100;
int *someIntPointer = NULL;
variable = &someIntVariable;
someIntPointer = (int *)variable;
.. // but this seems unncessary.
于 2013-03-10T12:59:23.293 回答
0

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

但是,使用类似的东西VARIANT是有代价的,因为您对其执行的每个操作都必须检查该操作对于当前的基础类型是否正确。VARIANT也使用更多的内存,因为联合有自己的开销(详见定义)。

您可能希望将变体操作包装在一个类中以简化其使用。与此VARIANT相反的好处void*是它为您提供了更多的类型安全性,并且代码变得更具可读性。

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

于 2013-03-10T13:00:08.227 回答
0

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

于 2013-03-10T13:01:53.680 回答
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;
}

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

于 2013-03-10T13:05:33.530 回答