gpt4 book ai didi

使用 sizeof、malloc 和 cast 的 C++ 对象实例化

转载 作者:太空宇宙 更新时间:2023-11-04 15:49:46 25 4
gpt4 key购买 nike

在 Java 中,我可以使用“类”方法“newInstance”来实例化一个对象,我发现这对我的特定系统非常有用。我现在正试图在 C++ 中实现类似的东西。

我还不清楚这是如何实现的,但经过一些思考......(你明白了吗......嗯?)我认为这可能通过创建一个具有属性的 ClassDescription 类来实现持有类实例的“sizeof”和方法 newInstance,该方法 mallocs 内存量并将其作为 void * 返回。然后调用代码需要适本地转换它。

C++ 语言是否适本地定义了这是否有效?

顺便说一句 .. 我知道我可以创建一个注册中心来保存类的工厂,这是一个备份计划。对于这个问题的答案,我将重点关注我所讨论的内容是否有效这一具体问题。

最好的问候

* 附加上下文 *此要求的原因是允许通用库实例化库用户知道但不知道库本身的类。该库将有一些元数据可用于实现此目的,因此可以告知类的大小。从用户的角度来看,不必向元数据添加工厂对象是“更简洁”的。

最佳答案

这在某些情况下是有效的。要求是类型必须是 "plain old data type" (POD) (see also this answer)。如果它有任何更复杂的东西(例如虚拟成员函数、具有虚拟成员函数的成员、基类也必须是 POD 等),那么它将无法工作并且是未定义的行为。

您可以 check if a type meets these requirements通过做:

#include <type_traits> 

static_assert(std::is_pod<A>::value, "A must be a POD type.");

一般来说,这可能表明您做错了。 C++ 不是 Java,可能有更好的方法来解决潜在的实际问题。

关于使用 sizeof、malloc 和 cast 的 C++ 对象实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10496249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com