boost apply::visitor -> отбрасывает квалификаторы

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

ошибка: передача «const CompareTitle» в качестве «этого» аргумента «bool CompareTitle::operator() (const T1&, const T2&) [с T1 = TestSizoen, T2 = TestSizoen]» отбрасывает квалификаторы [-fpermissive]

такая же ошибка для [T1=TestFilm, T2 = TestSizoen] и так далее.

Это код:

#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() константной функцией-членом, но это не решило проблему. Кто-нибудь может помочь? Я могу предоставить больше информации, если это необходимо. Заранее спасибо.


person Hannah P    schedule 24.11.2012    source источник


Ответы (1)


Я думаю, вам нужно пообещать, что operator() не изменит членов структуры, т.е.:

bool operator() (const T1& t1 , const T2& t2) const {
...
}

Это компилируется для меня (с GCC 4.4.5).

person ales_t    schedule 24.11.2012