在c ++中从拥有对象调用拥有对象中的方法的语法是什么?
家长班:
class Parent
{
private:
Child child;
public:
Parent()
{
addChild(child);
}
void MethodToBeCalled(int someArgument)
{
}
};
儿童班:
class Child
{
private:
void myVoid()
{
//Call parent method somehow
}
public:
Child()
{
}
};
我试图让我的问题尽可能简单和通用(尽可能多地受益)。如果我能说得更清楚,请告诉我。
谢谢!
答案 0 :(得分:3)
这是一个例子。我不得不修改你的代码以使其编译:
class Component {};
class Parent;
class Child : public Component
{
private:
inline void myVoid();
Parent &parent_ref;
public:
Child(Parent &pr) : parent_ref{pr} {}
};
class Parent : public Component {
private:
Child child;
public:
Parent() : child{*this}
{
// addChildComponent(child);
}
void MethodToBeCalled(int someArgument)
{
}
};
inline void Child::myVoid()
{
parent_ref.MethodToBeCalled(1);
}
答案 1 :(得分:2)
如果您确定Child
对象是Parent
类的成员子对象(如您的示例所示),则可以使用container_of
技巧(请参阅Understanding container_of macro in the Linux kernel )
class Child
{
private:
void myVoid();
};
class Parent
{
public:
Child child;
void MethodToBeCalled(int someArgument)
{
}
};
void Child::myVoid()
{
container_of(this, Parent, child)->MethodToBeCalled(42);
}
显然,这样的技巧会立即限制Child
类的可用性,使其始终成为Parent
类的成员(至少当您打算在其上调用myVoid()
方法时)。
更好的想法是将父对象的引用传递给子对象。
答案 2 :(得分:1)
在您的情况下,您不能,因为Child
和Parent
没有任何共同之处,只是它们都继承Component
。 Child
必须有Parent
个对象才能调用MethodToBeCalled()
。