2013-04-09 43 views
4

我有一个简单的Object-Components设计。喜欢的东西:在C++中暴露成员变量方法

class Object1 : public Object 
{ 
    Component1 _comp1; 
    Component2 _comp2; 
    ... 
    ComponentN _compN; 
}; 

是否有可能暴露为Objects1public:方法的一些方法从ComponentK而不在Object1一个方法调用内部ComponentK方法?

我需要一个简单的方法来做到这一点,因为每次我想公开一些ComponentK方法时,写一个函数是相当烦人的。

+0

如果'_compK'和你想调用的方法都是公共的,为什么不是'obj1instance - > _ compK.method()'? – msam 2013-04-09 06:42:21

+3

@msam因为_compK是私人的吗? – juanchopanza 2013-04-09 06:47:56

回答

11

不直接,没有。您可以使用私有继承从组件继承而不是汇总它们(请注意,私有继承不会表达is-a),然后通过using发布其某些成员函数。事情是这样的:

class Object1 : public Object, private Component1, private Component2, ..., private ComponentN 
{ 
public: 
    using Component1::function1(); 
    using Component1::function2(); 
    ... 
    using ComponentN::functionM(); 
}; 

我不是说这是一定要做的最佳方式,但它是一个方式

+0

请注意,尽管私有继承隐含** has-a **而不是** is-a **关系,因此'Component *'类是接口的一部分,因为Object1的客户端需要了解它们。您不能使用例如[PIMPL](http://herbsutter.com/gotw/_100/)成语。 – 2013-04-09 06:53:12

+5

当您将对象继承到类的私有区域时,它不是真正的* has-a *关系。它是has-a和is-a之间的混合体,更好地被称为“被实施的”。 – Bingo 2013-04-09 07:06:34