让我们假设我有一个包含单个memeber的包装类:
class wrapper {
public:
Object obj;
// the rest ...
};
如果成员变量obj有一些方法,我如何调用成员变量方法而不显式定义包装类中的方法?
class wrapper{
public:
void foo { obj.foo (); }
int bar (int x) {return obj.bar(x); }
};
我知道这在python中是可行的,但我怎样才能在c ++中使用相同的功能?
ps-请注意我不想继承成员类。根据定义,这不是一个包装类。我想通过构图实现这一点。
答案 0 :(得分:0)
有几种方法可以解决这个问题。一种是创建一个getter来返回wrapper
对象,另一种是覆盖类型转换操作符:
class Object {
public:
void foo() {cout << "test" << endl;}
};
class wrapper {
protected:
Object obj;
public:
operator Object&() {return obj;}
Object& getObject() {return obj;}
};
void f(A& a) {
a.foo();
}
int main() {
wrapper w;
((Object)w).foo();
w.getObject().foo();
f(w);
return 0;
}
如您所见,类型转换运算符要求您转换wrapper
对象,除非作为参数传递给函数f()
。
此外,在您的示例中,您已将obj
成员作为public
,因此它已公开。你可以:
wrapper w;
w.obj.foo();
以下是对此的讨论:What good are public variables then?