Здравствуйте, 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>