从数据成员(一次性嵌套类)中获取非 POD 对象的地址



我将从一些代码开始:

class myNonPODClass
{
public:
    virtual ~myNonPODClass() {}
    class
    {
    public:
        myNonPODClass* GetContainer()
        {
            return (myNonPODClass*)((int8_t*)(this) - offsetof(myNonPODClass, member));
        }
    } member;
};

显然,这是一个人为的例子。代码编译得很好,但我担心"非 POD 类型'myNonPODClass'的偏移量"。有没有更好的方法来做本质上相同的事情,而不必将myNonPODClass指针传递到嵌套的匿名类构造函数(或类似)中?"成员"必须准备好使用,无需任何初始化。可能吗?谢谢!

如果你想知道我到底想要这个做什么,我的 PROPERTY 宏和一个关于 pastebin 的注释示例(是的,它很棒 ^^ ): http://pastebin.com/xnknf39m

根据C++规范,此代码不起作用,原因如下:

  1. offsetof需要 POD 类型(在 C++11 中,它需要标准布局类型)。您的类型不是,因此调用它会导致未定义的行为。
  2. 根据C++规范,转换为 int8_t* 然后转换为另一种类型是未定义的行为。你需要使用char*,它有一定的宽松的投射规则。

最新更新