【发布时间】:2016-02-25 12:15:25
【问题描述】:
假设有一个结构
struct Thing {
int a;
bool b;
};
我得到一个指向该结构的成员b 的指针,比如某个函数的参数:
void some_function (bool * ptr) {
Thing * thing = /* ?? */;
}
如何获得指向包含对象的指针? 最重要的是:在不违反标准中的某些规则的情况下,我想要标准定义的行为,而不是未定义或实现定义的行为。
附带说明:我知道这会绕过类型安全。
【问题讨论】:
-
从
bool地址中扣除您的Thing指针很棘手。为什么不将事物地址/指针传递给您的函数? -
@Stefan 它应该是分配器的一部分:它有带有簿记和数据的节点,我在分配时分发一个指向数据的指针,然后在解除分配时将其取回。
-
我刚刚注意到您在这里关于分配器中的评论。这意味着您不能保证它是标准布局,并且
offsetof可以是未定义的。自 2015 年 11 月以来,您可能已经从这里开始,但如果它仍然相关并且出现非offsetof答案,我建议您实施它。幸运的是,对于分配器,您不需要返回指针。您可以将满足NullablePointer和RandomAccessIterator和typedef的任何类似指针的结构返回给pointer。 -
只是想知道:如果您需要从某个成员获取对象 - 为什么不能简单地将对象作为指针而不是成员传递?
标签: c++ pointers c++11 language-lawyer