Всем привет. Есть вот такой код:
#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 <<.
Добавить его в базовый класс и сделат виртуальным тоже не получиться, так как он параметризован.
Есть ли возможность это как-то обойти? Или может есть стандартные приемы для подобных случаев?
Заранее спасибо.