我正在使用Boss-Worker模型模式开发代码。我有个疑问。
Boss将添加到的列表是Boss类的成员。
为了使Worker能够访问它,我使Worker类继承自Boss。

1)这是在老板和工人之间共享列表的正确方法吗?
2)我在代码中面临模棱两可的继承。我该如何解决?

线程类

#include <pthread.h>
class ThreadClass
{
public:
    virtual int start();
    virtual void join();
    virtual void execute() = 0; //Each derived class will implement this
    virtual ~ThreadClass() {}
    ThreadClass() {}
private:
    ThreadClass* Tptr;
};


老板

#include "ThreadClass.h"
#include <list>

class Boss : public virtual ThreadClass
{
public:
    virtual void execute();
    Boss() {}
    ~Boss() {}

protected:
    std::list<int> Mylist;   //To be shared with the worker
};


工人

#include "ThreadClass.h"
#include "Boss.h"
class Worker : public Boss, public ThreadClass  //Getting error:Ambiguous ThreadClass
{
public:
    virtual void execute();
    Worker() {}
    ~Worker() {}
};


Worker正在继承Boss和ThreadClass,因为:

1)工人需要老板访问清单
2)Worker需要ThreadClass中的线程函数

最佳答案

Boss将添加到的列表是Boss类的成员。为了使Worker能够访问它,我使Worker类继承自Boss。


绝对不是一个类从另一个类继承的好理由。通常,当且仅当您可以在可以使用Worker的任何地方替换Boss时,Worker才应从Boss继承。从概念上讲,这里不是这种情况。

如果要提供对Bossint列表的访问权限,则WorkerBoss中知道Boss的提供者和访问者,或者(可能)使Worker为个friend

如果您不希望Boss了解Worker,而是希望Boss了解Boss,请在构造时或稍后的适当时间使Worker将列表传递给Boss。 。

提供对某些事物的访问权限并不是使一个类派生自另一个类的原因。

10-08 18:30