"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);
}
有没有办法将函数调用从 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);
}