Проблема такая: существует 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);
Может можно проще, красивей?