Re: Перегрузка методов базовых классов при множественном наследовании (msvc)
От: enji  
Дата: 07.07.13 11:55
Оценка: 1 (1)
Здравствуйте, VladEC, Вы писали:

VEC>Здравствуйте все!

VEC>При попытке скомпилировать под Win32 код, который успешно собирается gcc и clang-ом под Linux, Android, MacOS X и iPhone OS вылезла ошибка, решить которую сходу (красиво!) не удается.
VEC>Упростил по максимуму, надеюсь, суть проблемы будет понятна.
VEC>Есть два базовых класса, методы которых я хочу явно перекрыть в классе-наследнике (различное поведение) + реализовать третье поведение, если вызван метод наследника без явного указания базового интерфейса.
VEC>header-file
VEC>
VEC>class IReader
VEC>{
VEC>virtual int Read(void* buf, size_t& size) = 0;
VEC>virtual int SetPosition(size_t pos) = 0;
VEC>~IReader() {}
VEC>}

VEC>class IWriter
VEC>{
VEC>virtual int Write(const void* buf, size_t& size) = 0;
VEC>virtual int SetPosition(size_t pos) = 0;
VEC>~IWriter() {}
VEC>}

struct Storage_IReader : IReader {
  inline int SetPosition(size_t pos);
};

struct Storage_IWriter : IWriter{
  inline int SetPosition(size_t pos);
};

VEC>class Storage: public Storage_IReader , public Storage_IWriter 
VEC>{
VEC>public:
VEC>int Read(void* buf, size_t& size);
VEC>int Write(const void* buf, size_t& size);
VEC>int SetPosition_read(size_t pos);
    int SetPosition_write(size_t pos);
VEC>}

int Storage_IReader::SetPosition(size_t pos) { return  static_cast<Storage*>(this)->setPosition_read(pos); }
VEC>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.