Re: Перегрузка методов базовых классов при множественном наследовании (msvc)
От: Erop Россия  
Дата: 05.07.13 19:41
Оценка: 6 (2)
Здравствуйте, VladEC, Вы писали:

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


VEC>NOTE: перефигачить архитектуру не предлагать


Как вариант -- выпрямить руки...

Если честно, то я не понял что тебе хотелось выразить. Если оставаться в стандартном С++ без сяких расширений разных, то таки определение виртуальной функции берётся из MDT, даже если виртуальный метод с подходящим прототипом есть в нескольких базах...

То есть твой код не соответствует стандарту С++ и юзает расширение gcc и может ещё чьё-то, а так же дыры в стандарте. Это к вопросу о прямизне рук.

Но, на самом деле даже не особо-то и важно, что там в стандарте написано. Ясно же, что ты юзаешь очень тонкое поведение компилятора. Не можешь ответить за ради чего?
То есть что конкретно ты хотел бы выразить-то?

По поводу не изменения архиитектуры. Что-то же менять всё равно понадобится.
IMHO, проще всего, поменять так. Переименовать все три виртуальные функции, и дополнить классы/интерфейсы NVI.
То есть будет примерно так:
class IReader
{
    virtual int Read(void* buf, size_t& size) = 0;
    int SetPosition(size_t pos) { return setReadPosition( pos ); }
    virtual ~IReader() {}
protected:
    virtual int setReadPosition(size_t pos) = 0;
}

class IWriter
{
    virtual int Write(const void* buf, size_t& size) = 0;
    int SetPosition(size_t pos) { return setWritePosition( pos ); }
    virtual ~IWriter() {}
protected:
    virtual int setWritePosition(size_t pos) = 0;
}

class Storage: public IReader, public IWriter
{
public:
    int Read(void* buf, size_t& size);
    int Write(const void* buf, size_t& size);
    int SetPosition(size_t pos);
protected:
    virtual int setReadPosition(size_t pos);
    virtual int setWritePosition(size_t pos);
}
либо просто переименовать функции в райтере и ридере...
В общем, пока не объяснишь, что тебе на самом деле надо, либо кто-то это не протелепает, совета дельного тебе дать будет непросто
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.