boost apply::visitor -> отбрасывает квалификаторы
Я сделал программу, использующую Boost:: Вариант, который как-то не правильно.
ошибка: передача 'const CompareTitle' в качестве 'this' аргумента 'bool CompareTitle::operator()(const T1&, const T2&) [with T1 = TestSeizoen, T2 = TestSeizoen]' отбрасывает квалификаторы [-fpermissive]
та же ошибка для [T1=TestFilm, T2 = TestSeizoen] и так далее.
Это код:
#include <iostream>
#include <vector>
#include "boost/variant.hpp"
using namespace std;
class TestFilm{
private:
string titel_;
public:
TestFilm(const string& titel): titel_(titel){};
const string titel() const {return titel_;};
};
class TestSeizoen{
private:
string titel_;
public:
TestSeizoen(const string& titel): titel_(titel){};
const string titel() const {return titel_;};
};
struct CompareTitle: boost::static_visitor<bool>{
template <typename T1, typename T2>
bool operator() (const T1& t1 , const T2& t2){
return t1.titel() == t2.titel();
}
};
int main() {
typedef boost::variant<TestFilm,TestSeizoen> var;
vector <var> vec;
TestFilm film1("titel1");
vec.push_back(film1);
TestSeizoen seizoen1("titel2");
vec.push_back(seizoen1);
vector<var>::iterator it;
bool compare = boost::apply_visitor(CompareTitle(),*vec.begin(),*(vec.begin()+1));
return 0;
}
Я пытался сделать operator () функцией-константой, но это не решило проблему. Кто-нибудь может помочь? Я могу предоставить больше информации, если это необходимо. Заранее спасибо.
1 ответ
Решение
Я думаю, что вы должны пообещать, что operator() не изменит членов структуры, то есть:
bool operator() (const T1& t1 , const T2& t2) const {
...
}
Это компилируется для меня (с GCC 4.4.5).