类型转换成员变量指针到对象指针 我想知道在C++中,将对象变量类型化为对象指针是否可以?

类型转换成员变量指针到对象指针 我想知道在C++中,将对象变量类型化为对象指针是否可以?,c++,casting,C++,Casting,我有如下的课程- class Foo { private: int x; int y; int z; public void func1(...); void func2(...); void func3(...); } 此外,我还有一个第三方代码,它有一个回调- void callbackFunction (int *xPointer) { // This is what I want to do Foo * fooPtr

我有如下的课程-

class Foo
{
private:
    int x;
    int y;
    int z;

public
    void func1(...);
    void func2(...);
    void func3(...);
}
此外,我还有一个第三方代码,它有一个回调-

void callbackFunction (int *xPointer)
{
     // This is what I want to do
     Foo * fooPtr = (Foo*)xPointer;
     if(fooPtr->y == fooPtr->z)
     {
          //... do something
     }
}
在这段代码中,
xPointer
变量指向我的类对象的int x。 现在,我想知道我是否可以将
xPointer
键入
Foo*
。在C中,我键入指向结构指针的指针以访问其他成员,没有任何问题

< C++ >

是否存在涉及此类类型的危险? 如果这是一个问题,那么如何使用指向其成员变量的指针获取指向该对象的指针


谢谢

要能够直接使用类指针来获取指向其成员的指针,您必须确保类是一个类型。否则,可能会有隐藏的成员(如a)或衬垫,这将破坏任何努力

要了解它,您应该尝试使用一个便利特性类,它将告诉您该类是否具有标准布局

在任何情况下,听起来你都应该避免这种方法,因为它看起来本质上是不安全的。为什么不能将指针传递给成员变量?例如:

Foo myFoo;
cllabackFunction(&(myFoo.x));

为了能够直接使用类指针来获取指向其成员的指针,必须确保该类是一个类型。否则,可能会有隐藏的成员(如a)或衬垫,这将破坏任何努力

要了解它,您应该尝试使用一个便利特性类,它将告诉您该类是否具有标准布局

在任何情况下,听起来你都应该避免这种方法,因为它看起来本质上是不安全的。为什么不能将指针传递给成员变量?例如:

Foo myFoo;
cllabackFunction(&(myFoo.x));

我觉得这并不是你真正想做的事情。尽管如此

offsetof(type,member)
宏,它返回结构中字段的字节偏移量。您可以使用它来获取对象的基址(从它的一个成员的地址——如果您知道是哪个成员的话),并将该地址强制转换为正确的类型


当然,它不能保证对非吊舱有效,虽然不能保证并不意味着它不起作用,但你对不可移植和潜在的未定义行为的认可不是吗?

这并不是你真正想做的事情。尽管如此

offsetof(type,member)
宏,它返回结构中字段的字节偏移量。您可以使用它来获取对象的基址(从它的一个成员的地址——如果您知道是哪个成员的话),并将该地址强制转换为正确的类型


当然,它不保证对非吊舱有效,尽管不保证并不意味着它不起作用,您对不可移植且可能未定义的行为表示满意,是吗?

如果是第三方代码,您将如何转换
xPointer
?如果是第三方代码,您将如何转换
xPointer
?谢谢您的回答。我确实传递了回调函数中提到的指针。但是,我想在回调函数中访问
myFoo.y
。为此,我需要指向
myFoo
的指针,谢谢你的回答。我确实传递了回调函数中提到的指针。但是,我想在回调函数中访问
myFoo.y
。为此,我需要指向
myFoo