一组具有类似接口但方法签名不同的类

时间:2014-05-20 19:46:58

标签: c++ multithreading qt inheritance design-patterns

我有越来越多的工作类,它们共享一个非常相似的接口,但在它们的方法中使用不同的参数。他们看起来有点像这样:

class SomeWorker : public QObject
{
    Q_OBJECT

public:
    explicit SomeWorker(QObject *parent = 0);
    ~SomeWorker();

public slots:
    void doWork( /* various params */ );

signals:
    void signalResultReady( /* various param */ );
    void signalError(QString errorMessage);
    void signalStatus(QString status);
    void signalProgress(int progress);    
};

因为这些类采用doWork()方法的各种参数并通过signalResultReady()信号返回不同的对象,所以我在创建基类Worker类时遇到问题,该类将指定公共接口。另一方面,我觉得必须有一些更优雅的设计,这将允许我避免代码重复或至少强制执行所有类中的公共接口。

3 个答案:

答案 0 :(得分:0)

我将按如下方式定义基类:

class BaseWorker : public QObject
{
    Q_OBJECT

public:
    BaseWorker (QObject *parent = 0);
    ~SomeWorker();

signals:
    void signalError(QString errorMessage);
    void signalStatus(QString status);
    void signalProgress(int progress);    
};

以下列方式的工人类:

class SomeWorker : public BaseWorker
{
    Q_OBJECT

public:
    SomeWorker(QObject *parent = 0);
    ~SomeWorker();

public slots:
    void doWork( /* various params */ );

signals:
    void signalResultReady( /* various param */ );
};

答案 1 :(得分:0)

如果该成员有效:

void doWork( /* various params */ );
void signalResultReady( /* various param */ );

接收相同数量的参数并且只在它们的类型上有所不同,你可以使用这样的模板(让我们假设他们期望3个参数作为输入):

template<class T1, class T2, class T3> void doWork(T1 a1, T2 a2, T3 a3);
template<class Z1, class Z2, class Z3> void signalResultReady(Z1 b1, Z2 b2, Z3 b3); 

答案 2 :(得分:0)

我更希望为 各种参数 [VARIOUS_PARAMS]创建基本结构,以及 为我的worker类创建一个基类,它定义了doWork(VARIOUS_PARAMS * param), 并制作不同的VARIOUS_PARAMS子结构。

struct VARIOUS_PARAMS_SOME_CLASS:VARIOUS_PARAMS { };