I have a growing number of worker classes which share a very similar interface but use different parameters in their methods. They look somewhat like this:

```
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);    
};

```

Because these classes take various parameters for `doWork()` method and return different objects through `signalResultReady()` signal I have a problem with creating a base `Worker` class which would specify the common interface. On the other hand I feel there must some more elegant design which would allow me to avoid code duplication or at least enforce the common interface in all the classes.