I have a variant variable where the different types all implement operator++
. I would like to apply incrementation directly on the variant variable. Is there an easy way to do that ? Or have I to apply it in a switch on each type ?
Simple example with stl iterators :
typedef boost::variant<
std::vector<double>::iterator,
std::vector<double>::reverse_iterator,
std::set<double>::iterator,
std::set<double>::reverse_iterator
> AnyIterator;
void incr(AnyIterator& ai)
{
++adi; // this doesn't compile: no match for operator++ blah blah blah
// Have I really to write this kind of ugly thing ?
if(ai.type() == typeid(std::vector<double>::iterator))
++boost::get<std::vector<double>::iterator>(ai);
else if(ai.type() == typeid(std::vector<double>::reverse_iterator))
++boost::get<std::vector<double>::reverse_iterator>(ai);
else if(ai.type() == typeid(std::set<double>::iterator))
++boost::get<std::set<double>::iterator>(ai);
else if(ai.type() == typeid(std::set<double>::reverse_iterator))
++boost::get<std::set<double>::reverse_iterator>(ai);
}
Note : I use gcc 4.8.1 and Boost 1.57. I don't want solution from C++11, I can't use it due to compatibility with old gcc versions.