У меня есть вариантная переменная, в которой все разные типы реализуют operator++
. Я хотел бы применить приращение непосредственно к переменной варианта. Есть ли простой способ сделать это? Или я должен применить его в переключателе для каждого типа?
Простой пример с итераторами stl:
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);
}
Примечание. Я использую gcc 4.8.1 и Boost 1.57. Мне не нужно решение от C++11, я не могу его использовать из-за совместимости со старыми версиями gcc.
++
для своего типаAnyIterator
. - person Holt   schedule 30.05.2016