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

Posted

技术标签:

【中文标题】从类名转换的 C++ 指针类型 [关闭]【英文标题】:C++ Pointer type cast from class name [closed] 【发布时间】:2013-09-22 22:56:00 【问题描述】:

如何在 C++ 中从 String 中的类名转换指针?

伪代码:

int * ptr = something;
myStruct ptrstruct = (ClassFromString("myStruct") ptr); 
// The class/struct name is passed in as String

谢谢

【问题讨论】:

不清楚;你想让这段代码做什么? 我不认为C++直接支持这种反射。 也许您正在寻找“类工厂”设计模式。这可以很容易地用 C++ 实现,但不是语言特性。 如果你有这样的方法,也许你可以描述你想解决的问题? 【参考方案1】:

我不是 C++ 大师,但我有两个想法可能有助于头脑风暴:

希望使用此处描述的注册表模式会有所帮助:Instantiate class from name? 其次,按照注册表模式的想法,您可以创建一个用于强制转换的函数,例如MyClass something = registry.cast("MyClass", ptr);

【讨论】:

【参考方案2】:

我不确定,但这必须有效 如果发生这种情况,只有 Void 指针或 boost 可以提供帮助

thing * p = something; // pointer to object
void * pv = p;          // pointer to void
thing * p2 = static_cast<thing *>(pv); // pointer to the same object

也许同样的情况是在从线程返回值时 在 c++ 中不可能进行整体反射。 它只是头脑风暴。

【讨论】:

这看起来与 OP 的要求几乎完全无关。 我看到你在这里做了什么,但是我认为你没有理解这个问题 - 部分原因是我的措辞不好。但作为一个例子:像这样thing * p2 = static_cast&lt;"thing *"&gt;(pv);你看到我在那里做了什么吗?这就是我想要得到的效果。

以上是关于从类名转换的 C++ 指针类型 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”

类型转换 c++ 指针和非类型转换指针指向相同的位置,但给出不同的值

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

C++中四种转换类型的区别

从 HANDLE 到 ULONG C++ 的类型转换截断

C++中指针类型转换的解释