доступ к патомку через базовый класс
От: Nickolas Чехия  
Дата: 29.03.06 13:49
Оценка:
Всем привет. Есть вот такой код:


#include <iostream>
#include <vector>

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


struct super_stream : basic_stream
{

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

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

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


struct another_super_stream : basic_stream {};

int main()
{
  super_stream ss;

  basic_stream& bs = ss;

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

}


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

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

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

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.