wq_601840968 发表于 2017-4-6 15:21:38

c++的成员类对象如何得到父对象的指针

class CA
{
public:
      CB b;
};

(CB为另一个类)
不初始化传入CA的指针,成员对象b如何得到运行时CA的指针?

mcu5i51 发表于 2017-4-6 15:36:33

加参数不就可以了

xukaiming 发表于 2017-4-6 16:13:06

没有办法知道

GoingDown 发表于 2017-4-6 17:01:04

这里没有继承关系,只是聚合,哪有什么父对象? 单独存在的一个CB类对象,跟CA没有必然的关系。 也就是说CA类中有一个CB(has-a relationship), 但并不是所有的CB都属于某个CA.所以你的问题,描述不清楚,不知你想问什么,或实现什么功能。

yoz 发表于 2017-4-6 17:04:16

用偏移量减?不过这根本不是办法。

canspider 发表于 2017-4-6 17:08:38

可以算偏移得到
CA里面一定有个CB
但是CB不一定是CA的一部分

lihui_mc 发表于 2017-4-7 09:10:46

4楼说的对,没描述清楚。我觉得楼主是想问:B类对象怎么得到父类成员的指针。

armstrong 发表于 2017-4-8 13:34:34

C语言里的struct结构体,可以用偏移量来减去成员地址得到外套结构体对象地址;但是C++没有这方面的规范,可以如此也可以不如此,所以最好别模仿C的方式做,否则编译器之间的移植性不能保证了!

yujintian 发表于 2017-4-8 13:41:25

不太明白楼主的意图。如果在CA类内部,b可以直接使用this指针。

armstrong 发表于 2017-4-8 13:43:45

linux源码是C语言开发的,它大量的使用了container_of()宏,就是利用了这个方法:

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({          \
    const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
    (type *)( (char *)__mptr - offsetof(type,member) );})
页: [1]
查看完整版本: c++的成员类对象如何得到父对象的指针