如何在包装类中调用成员方法而不重复包装类中的方法定义?

时间:2017-09-06 12:31:22

标签: class visual-c++ wrapper

让我们假设我有一个包含单个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-请注意我不想继承成员类。根据定义,这不是一个包装类。我想通过构图实现这一点。

1 个答案:

答案 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?