我将从一些代码开始:
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++规范,此代码不起作用,原因如下:
-
offsetof
需要 POD 类型(在 C++11 中,它需要标准布局类型)。您的类型不是,因此调用它会导致未定义的行为。 - 根据C++规范,转换为
int8_t*
然后转换为另一种类型是未定义的行为。你需要使用char*
,它有一定的宽松的投射规则。