从类到类,C ++的“传递”函数调用

时间:2015-10-02 07:58:30

标签: 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::method2(int arg2)
{
  myfoo2->method2(arg2);
}

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

提前谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果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

答案 2 :(得分:0)

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

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

private:
    foo2* foo2_;
};

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

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