1

我将从一些代码开始:

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

4

1 回答 1

1

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

  1. offsetof需要 POD 类型(在 C++11 中,它需要标准布局类型)。您的类型不是,因此调用它会导致未定义的行为。
  2. 根据 C++ 规范,转换为int8_t*然后转换为另一种类型是未定义的行为。您需要使用 a char*,它具有某些宽松的强制转换规则。
于 2012-08-08T02:44:41.447 回答