如何将指针转换为我在 C++ 中输入的类型?

Posted

技术标签:

【中文标题】如何将指针转换为我在 C++ 中输入的类型?【英文标题】:How can I transform a pointer to the type I input in C++? 【发布时间】:2021-07-06 06:27:21 【问题描述】:

我有一个问题:

我想生成一个type_t指针(type_t *),指向一个内存块,里面存储了指定的值。

换句话说,它的输入是:

字符串值, 字符串类型 它的输出是: (type*)pointer ,指向一些存储“值”的内存。

我不知道该怎么做。我尝试使用模板,但我认为它需要“类型”,而不是“字符串类型”。我唯一的想法是使用这些信息生成一个新的 cpp 文件并使用它来实现。但是当我想产生大量的价值时,这很尴尬......

我在使用 clang 工具时提出了这个问题,我手里拿着 QualType 和二进制值,我想恢复原始值。我尝试使用 Expr 或 VarDecl 中的构造函数,但未能达到我的目标。

谁能提供一些想法?非常感谢您阅读此消息。


非常感谢您的所有努力!我想我应该用一些代码让问题更清楚

我的目标是写一个这样的函数

type_t* func(QualType type_t, string value) 
 /* some magic here */

或许

type_t* func(string type_t, string value) 
 /* some magic here */

这听起来不可能,因为在确定输入 QualType 之前,甚至还没有确定类型。

当然void*用作中间件是个好主意,我仍然想知道我该怎么写

type_t* func(string type_t, void* memory_block) 
 /* some magic here */

我认为问题与以下相同:我们如何输入类型消息并输出该类型的一些值(可能已经存在)?

再次感谢。

【问题讨论】:

抱歉不明白这个问题。也许一些例子会有所帮助? 你在用什么架构?为一种类型获取内存的常用方法是获取本地(或可能是全局)对象:type_t t; type_t* ptr = &t;,如果您需要动态分配的内存 new type_t();,或者,如果您需要多个实例:type_t t[n]; /* local array */ new type_t[n]; /* dynamic array */。请注意,如果需要,本地数组会自动衰减为指针。 如果您可以直接访问内存,通常在裸微控制器上,并且需要为您的对象分配一个非常具体的内存地址(或者如果您提前创建了内存– 然后注意正确对齐!)您可以使用新位置:type_t* t = new (0x20102021) type_t(); type_t* array = new (0x20122010) type_t[n]; @MartinYork 我编辑了我的描述,现在可能更清楚了吗? @Aconcagua 我不太确定我应该如何描述我的“架构”,我正试图在 CentOS 系统上借助 Clang 工具使用 C++ 来做到这一点。 【参考方案1】:

c 或 c++ 中不提供这种功能。您可以在 python 中使用 exec() 来实现。 要解决这个问题,您可以做的一件事是预先声明一些与您要传递的字符串同名的变量。

【讨论】:

【参考方案2】:

您可以使用 void 指针来转换任何类型的指针。让我知道它是否有效。如果您提供您想要做的脚本,那就太好了

【讨论】:

对不起,我没有把我的问题说清楚。使用 void 指针作为中间部分肯定是一个好主意,但如何将 (void*) 转换为 (type_t*) 仍然是一个问题,我认为这是问题的主要难点。不过谢谢你的回答

以上是关于如何将指针转换为我在 C++ 中输入的类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 IntPtr 转换为本机 C++ 对象

C++ 中的类型转换和指针类型转换

使用指针在 C++ 中显示 char 变量的地址?

从类名转换的 C++ 指针类型 [关闭]

使用 c 库的 C++ 程序 - 将智能指针转换为原始 c 样式指针?

调用旧版 C API 时,如何在现代 C++ 中正确地将指向结构的指针转换为指向其他结构的指针?