C++:是否可以在执行时设置 void-pointer、variant-object 或 an-object 的类型?

2024-05-19

void-pointer、variant-objects 和any-objects 是令人惊奇的,因为它们可以在同一个变量中存储许多不同的类型。但我对它们有一个问题,我需要在执行时指定它们的类型(创建和/或取消引用它们),这可能吗?

为了更清楚,例如,据我所知,要创建和取消引用它们,我必须这样做:

void* ptr = new int(8);
variant<int, float> var = 8;
any a = 8;
...
cout << *(int*)ptr;
cout << get<int>(var);
cout << any_cast<int>(a);

正如您所看到的,在所有情况下,类型都必须“写在代码中”(编程时?)。如果该类型可以在执行时间中确定,那就太好了。让我梦想一下......例如,如果我们可以“存储类型”作为对象,我们可以这样做:

TYPE mi_tipo;
...
mi_tipo = int;   // or float, or char or any other...
...
void* ptr = new mi_tipo();
cout << *(mi_tipo*)ptr;

这样的事情可能吗?如果没有,你会怎么做?我正在尝试模拟编译器执行,因此我需要一个可以存储任何类型变量的结构,因此我需要一种在执行时取消引用它们的有效方法。


C++ 是一种静态类型语言。任何表达式的类型都必须在编译时已知。虽然编译时代码可以执行有限形式的类型计算,甚至在某种程度上可以进行类型生成,但所有这些都存在only在编译时。

一旦到达运行时,一切都必须知道。通过基类实现动态多态性virtual函数存在,但在创建实际对象时,您必须知道它是什么类型。有一些技术可以允许动态确定要实例化哪个多态派生类,但它们最终都归结为一堆条件语句和硬编码(即使是通过模板生成)类型集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:是否可以在执行时设置 void-pointer、variant-object 或 an-object 的类型? 的相关文章

随机推荐