Есть у меня базовый класс AbstractChannel. От него наследуется три класса: FileChannel, TcpChannel, ComChannel. Выглядит он примерно вот так:
class AbstractChannel : public QObject
{
Q_OBJECT
public:
AbstractChannel(QObject *parent = 0);
virtual ~AbstractChannel();
virtual int getChar(num_t Port);
virtual bool isFileDef(num_t Port);
virtual void writeProc(const void *ptrs, size_t size, num_t Port);
virtual bool isRw(num_t Port);
virtual TCHAN_Type channelType(num_t Port);
};
Создавался AbstractChannel для того, чтобы можно было передать указатель на производные классы FileChannel/TcpChannel/ComChannel в некий класс парсера.
Проблема в том, что парсер использует все вышеперечисленные методы как методы обратного вызова. Ну, к примеру, если парсеру нужно получить данные из потока, он вызывает метод getChar(). И поэтому все эти методы должны быть статическими.
Однако, если в классах FileChannel/TcpChannel/ComChannel сделать реализацию этих методов со спецификатором static, то будет ошибка:
error: ‘static int FileChannel::getChar(num_t)’ cannot be declared
since ‘virtual int AbstractChannel::getChar(num_t)’ declared in base class
virtual int getChar(num_t Port);
^~~~~~~
Да и если прописать static в сам базовый класс, то тоже будет ошибка что использование virtual static недопустимо.
Вот. Как обойти эту проблему? Возможно, есть какое-то стандартное решение, о котором в силу отсутствия опыта я не знаю?