Можно ли написать const
функция с apply_visitor
внутри?
Например, этот код компилируется без ошибок:
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <boost/variant.hpp>
using namespace std;
typedef boost::variant<int,string> vTypeVariants;
struct vType_toN : boost::static_visitor<int>
{
int operator()(int& i) const {
return i;
}
int operator()(const string& str) const{
return str.length();
}
};
class vType{
public:
vType(const int& src) : data(src){}
vType(const std::string& src) : data(src){}
int getLength(){
return boost::apply_visitor(vType_toN(),data);
}
private:
vTypeVariants data;
};
int main(int argc, char ** argv)
{
vType x = string("2");
printf("L=%d",x.getLength());
return(0);
}
Если вы не добавите const к getLength ():
int getLength() const{
return boost::apply_visitor(vType_toN(),data);
}
В этом случае появляется ошибка с обширным описанием (2 страницы) с жалобой на проблему с инициализацией первого аргумента.
Итак, вопрос в следующем: Как использовать apply_visitor внутри функции const?
Узнал сам.
Забыл const перед int в определении оператора класса static_visitor.
Может быть, кто-то найдет это полезным, так как это было нелегко выяснить (мой оригинальный класс намного больше).
Других решений пока нет …