5

我有一个简单的Object-Components设计。就像是:

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

是否可以在不创建调用内部方法的public:方法的情况下公开Objects1某些方法的方法?ComponentKObject1ComponentK

我需要一种简单的方法来执行此操作,因为每次我想公开某个ComponentK方法时都编写一个函数非常烦人。

4

2 回答 2

13

不直接,不。您可以使用私有继承从组件继承而不是聚合它们(注意私有继承不表达is-a),然后通过using. 像这样的东西:

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

我并不是说这一定是最好的方法,但它是一种方法。

于 2013-04-09T06:40:07.653 回答
0

您可以返回指向成员的指针;指针将归调用者所有,可以在不影响类成员的情况下删除:

// Example program
#include <iostream>
#include <string>


class Member {
    private:
        int size = 10;
    public:
        int getSize() {
            return size;
        };
};

class MemberContainer {
    private:
        Member member;
    public:
        Member * getMember () {
            return &member;
        };
};

int main()
{
  MemberContainer memberContainer;
  Member * memberPtr = memberContainer.getMember();
  std::cout << memberPtr->getSize() << std::endl;
  memberPtr = nullptr;
  delete memberPtr;
  Member * anotherMemberPtr = memberContainer.getMember();
  std::cout << anotherMemberPtr->getSize() << std::endl;
}

这将输出:

10
10
于 2020-07-04T13:39:49.567 回答