Re: доступ к патомку через базовый класс
От: e-garin Россия  
Дата: 29.03.06 14:03
Оценка:
Здравствуйте, Nickolas, Вы писали:

N>Всем привет. Есть вот такой код:


N>
N>#include <iostream>
N>#include <vector>

N>struct basic_stream
N>{
N>  virtual std::ostream& operator << (int v) {}
N>};

N>struct super_stream : basic_stream
N>{

N>  template<typename T>
N>  std::ostream& operator << (T const &v)
N>  {
N>    std::cout << "operator << (T const &v)" << std::endl;
N>  }

N>  virtual std::ostream& operator << (int v)
N>  {
N>    std::cout << "operator << (int v)" << std::endl;
N>  }

N>  template<typename T>
N>  std::ostream& operator << (std::vector<T> const &v)
N>  {
N>    std::cout << "operator << (std::vector<T> const &v)" << std::endl;
N>  }
N>};


N>struct another_super_stream : basic_stream {};

N>int main()
N>{
N>  super_stream ss;

N>  basic_stream& bs = ss;

N>  std::vector<int> v;
N>  bs << v;

N>}
N>


N>В краце хочеться, чтобы каждый стрим мог форматировать данные как ему хочеться. Но в момент, когда начинается форматирование у меня есть только ссылка на базовый стрим.


N>Понятно, что приведенный код работать не будет: в базом классе нет нужного operator <<.

N>Добавить его в базовый класс и сделат виртуальным тоже не получиться, так как он параметризован.

N>Есть ли возможность это как-то обойти? Или может есть стандартные приемы для подобных случаев?


Ну насколько я понимаю, через интерфейс базового класса можно вызвать только методы в нём (интерфейсе) определённые. Если хочется вызывать методы наследников, то приводи тип, используя dynamyc_cast.
А мне нравится жить :).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.