我使用boost :: variant制作了一个程序,不知道它是不正确的。
错误:将'const CompareTitle'作为'bool CompareTitle :: operator()的'this'参数传递(const T1&,const T2&)[与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()成为const成员函数,但这并没有解决问题。有人可以帮忙吗?如果需要,我可以提供更多信息。提前谢谢。
答案 0 :(得分:6)
我认为您需要保证operator()不会更改结构成员,即:
bool operator() (const T1& t1 , const T2& t2) const {
...
}
这为我编译(使用GCC 4.4.5)。