C++ &引用;通行证;从类到类的函数调用,C++;

C++ &引用;通行证;从类到类的函数调用,C++;,c++,class,call,C++,Class,Call,有没有一种方法可以将函数调用从一个类传递到另一个类? 例如: //foo.cpp foo::foo { ... myfoo2 = new foo2(); ... } //foo2.h class foo2 { ... public: void method1(); void method2(int arg2) ... } 现在我想从foo类之外使用foo2的方法(例如method2) 无需实施以下措施: //foo.cpp ... void foo::meth

有没有一种方法可以将函数调用从一个类传递到另一个类? 例如:

//foo.cpp
foo::foo
{
  ...
  myfoo2 = new foo2();
  ...
}

//foo2.h
class foo2
{
  ...
  public:
  void method1();
  void method2(int arg2)
  ...
}
现在我想从foo类之外使用foo2的方法(例如method2) 无需实施以下措施:

//foo.cpp
...
void foo::method2(int arg2)
{
  myfoo2->method2(arg2);
}
问题是,我有很多这样的东西,这会占用很多空间,看起来也不好看。 有没有其他解决方案,或者至少有一个简短的版本具有相同的效果


提前谢谢你

您可以使用私有继承在foo类中包含foo2对象,而无需创建is-a关系。然后,只需使用using语句公开函数,如下所示:

class foo : private foo2
{
public:
    using foo2::method2;
};

为什么不在foo类中有一个方法返回指向foo2类的指针(或常量指针),如下所示:

class foo
{
public:
    foo2* getFoo2() const { return foo2_; }

private:
    foo2* foo2_;
};
然后在外部,您可以像这样使用它:

foo f;
auto f2 = f.getFoo2();
f2->method1();
f2->method2(/*args*/);

如果
foo
只是
foo2
的句柄或包装器,那么重载
运算符->
可能是有意义的:

#include <iostream>

class foo2 {
public:
  void method1(){ std::cout << "method1\n"; }
  void method2(int /*arg2*/) { std::cout << "method2\n"; }
};

class foo {
  foo2 myfoo2;
public:
  foo2* operator->() { return &myfoo2; }
};

int main() {
  foo f;
  f->method1();
  f->method2(1);
}
#包括
第二类{
公众:
void method1(){std::cout method1();
方法2(1);
}

如何
myfoo.myfoo2->method2(…)
(或者
myfoo->myfoo2->method2(…)
)Mb在您的情况下,最好使用继承而不是压缩?或者只使用像
foo2*getFoo2(){return myfoo2;}
,然后使用像
myfoo1.getFoo2()->method2(param)这样的方法
?不清楚您实际想要实现什么。为什么必须通过
foo
而不能简单地让
foo2
调用其方法?我使用的是Qt,我的设计依赖于信号和插槽。因此,我不能使用指针,因为从类的外部看,它应该像插槽。我也不能继承在传统的情况下,因为QObject的多个继承是不允许的。这听起来是一个很好的解决方案,但不幸的是,在我的情况下,我正在使用Qt和这两个类(foo和foo2)从QObject继承。不允许从QObject进行多个继承。这对我来说没有意义。私有继承本质上与聚合相同,只是你没有给成员命名。如果你尝试它会发生什么?当然,没有它,它编译起来很好。只要我添加它,我就会得到很多“Object”是“foo”的模糊基础“我试图在foo和其他类之间连接信号和插槽。当我注释掉错误的部分时,它只是将错误转移到另一个地方,似乎没有连接到实际连接。有什么想法吗?”?