Доступ к элементам контейнеров различного типа
От: oilmagnate  
Дата: 05.09.06 07:31
Оценка:
Проблема такая: существует std::map в котором first — это некоторый id, а second содержит итератор на несовместимые контейнеры, т.е. например, структура с id == 0: это некий самопальный stl-совместимй чудо-контейнер, а вторая, имеющая id == 1 — это std::list

Теперь вопрос: как реализовать такое, и добраться до объекта, на который ссылаются?

Варианты до которых додумался я — это

1. использовать boost::any

std::map<int, boost::any> ref;
    
    std::list<int> l;
    l.push_back(7);
    ref[0] = std::find(l.begin(), l.end(), 7);
    
    std::vector<int> v;
    v.push_back(6);
    ref[1] = std::find(v.begin(), v.end(), 6);
    
      boost::any val = ref[1];
    std::cout << *boost::any_cast<std::vector<int>::iterator>(val);


но как тогда зная typeid приводить any к нужному типу?

2.

Только по рукам сильно не бейте...

    class a {
    public:
         a() {};
    };

    template <class iterator> 
    class b : public a {
    private:
         iterator it;
    public:
         b(iterator _it) : it(_it) {};
         iterator get() { return it; };
    };


тогда

     std::map<int, a*>  m;
     m[0] = new b<std::vector<int>::iterator>(i);


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