我正在使用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
继承。从概念上讲,这里不是这种情况。
如果要提供对Boss
的int
列表的访问权限,则Worker
在Boss
中知道Boss
的提供者和访问者,或者(可能)使Worker
为个friend
。
如果您不希望Boss
了解Worker
,而是希望Boss
了解Boss
,请在构造时或稍后的适当时间使Worker
将列表传递给Boss
。 。
提供对某些事物的访问权限并不是使一个类派生自另一个类的原因。