如何将指针转换为我在 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++ 中输入的类型?的主要内容,如果未能解决你的问题,请参考以下文章