在C++中动态声明数据类型

Bla*_*de3 10 c++

我希望能够做到以下几点:

我有一个包含数据类型的字符串数组:

string DataTypeValues[20] = {"char", "unsigned char", "short", "int"};
Run Code Online (Sandbox Code Playgroud)

然后,我想在运行时创建一个数据类型的变量.我不会在编译时知道正确的数据类型应该是什么.

因此,例如,如果在运行时我确定变量x需要是int类型:

DataTypeValues[3] x = 100;
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,所以我怎么能这样做呢?

小智 16

简单的答案是你不能 - 在C++编译时需要知道类型.你可以使用诸如boost :: any或unions之类的东西做类似的东西,但它不会很漂亮.

  • 实际上,由于这组类型在编译时是有界的并且是已知的,因此这里适当的类将是`boost :: variant <char,unsigned char,short,int>`.仍然不漂亮,但更好.你不再能填充字符串了. (4认同)
  • 那么boost是如何做到这一点的呢?python 又是如何做到这一点的呢?据我所知,python 是用 C/C++ 构建的。CMIIW。 (2认同)

sme*_*lin 12

你必须使用联合来实现类似的东西,但处理联合是一个非常困难的事情,所以你应该选择一个容器类,它将联合逻辑包装在Boost.Variant或Qts QVariant等接口的后面.