"Pass" 从 class 到 class 的函数调用,C++

"Pass" function call from class to class, C++

有没有办法将函数调用从 class 传递到 class? 例如:

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

//foo2.h
class foo2
{
  ...
  public:
  void method1();
  void method2(int arg2)
  ...
}

现在我想从 foo 外部使用 foo2 的方法(例如 method2)class 无需执行以下操作:

//foo.cpp
...
void foo::method2(int arg2)
{
  myfoo2->method2(arg2);
}

问题是,我有很多这样的东西,这会占用很多 space 并且看起来不太好。 有没有其他的解决方案,或者至少有一个具有相同效果的简短版本?

提前致谢!

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

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

为什么不在你的 foo class 中有一个方法 returns 指向你的 foo2 class 的指针(或 const 指针),如下所示:

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

private:
    foo2* foo2_;
};

然后在外面你可以这样使用它:

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

如果 foo 只是 foo2 的句柄或包装器,则重载 operator->:

可能有意义
#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);
}

Live demo.