通过指向其中一个成员的指针来确定对象指针的最佳方法是什么?
What is the best way to determine object pointer by pointer to one of it's members?
如果我有:
struct S
{
std::size_t szArray;
int dArray[];
} ;
int main()
{
extern int (*pArr)[]; //pointer to member 'dArray' of object with type 'S'
S *pStruct = /*??????????*/; //pointer to the object
}
获取此指针的最佳方法是什么?
没有什么好办法。
唯一支持的方式是
#include <cstddef> // for offsetof
S *pStruct = reinterpret_cast<S*>
(reinterpret_cast<char*>(pArr) - offsetof(S, dArray));
请注意 offsetof
仅针对标准布局类型进行了明确定义,并且标准 C++ 不允许将未确定大小的数组作为 class 成员。除非你有充分的理由使用 C 习语,否则我建议 std::vector<int>
会更安全、更方便。
如果我有:
struct S
{
std::size_t szArray;
int dArray[];
} ;
int main()
{
extern int (*pArr)[]; //pointer to member 'dArray' of object with type 'S'
S *pStruct = /*??????????*/; //pointer to the object
}
获取此指针的最佳方法是什么?
没有什么好办法。
唯一支持的方式是
#include <cstddef> // for offsetof
S *pStruct = reinterpret_cast<S*>
(reinterpret_cast<char*>(pArr) - offsetof(S, dArray));
请注意 offsetof
仅针对标准布局类型进行了明确定义,并且标准 C++ 不允许将未确定大小的数组作为 class 成员。除非你有充分的理由使用 C 习语,否则我建议 std::vector<int>
会更安全、更方便。