gpt4 book ai didi

boost apply::visitor -> 丢弃限定符

转载 作者:行者123 更新时间:2023-12-01 10:58:16 27 4
gpt4 key购买 nike

我使用 boost::variant 制作了一个程序,但不知何故 const 不正确。

错误:将“const CompareTitle”作为“bool CompareTitle::operator()(const T1&, const T2&) [with T1 = TestSeizoen, T2 = TestSeizoen]”的“this”参数传递会丢弃限定符[-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() 成为常量成员函数,但这并没有解决问题。有人可以帮忙吗?如果需要,我可以提供更多信息。提前致谢。

最佳答案

我认为您需要保证 operator() 不会更改结构成员,即:

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

这为我编译(使用 GCC 4.4.5)。

关于boost apply::visitor -> 丢弃限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com