Ошибка компиляции при перезагрузке оператора с использованием boost :: variable

Я пытаюсь выучить boost.variant. Однако код, который я скопировал из книги, не пройдет компиляцию:

class var_print : public boost::static_visitor<void>
{
public:
template<typename T>
void operator()(T &i) {
i *= 2;
cout<<i<<endl;
}
};

Вот как я пытался это использовать.

    typedef boost::variant<int,double,string> var_t;
var_t v(1); //v->int
boost::apply_visitor(var_print(),v);

Компилятор генерирует следующую ошибку:

ОШИБКА: нет совпадения для ‘operator * =’ в ‘i * = 2’

Это меня озадачивает, так как функция шаблона будет определять тип параметра при каждом вызове, а int должен определять оператор * =.

1

Решение

Вам нужно иметь отдельный operator() за std::string& так как нет оператора *= определяется для std::string,

Кроме того, ваш оператор должен быть отмечен const так как вы передаете экземпляр временного посетителя apply_visitor,

4

Другие решения

Других решений пока нет …