typedef boost::variant<long long,double,string> possibleTypes ;
set<possibleTypes,less<possibleTypes> > ascSet ;
set<possibleTypes,greater<possibleTypes> > descSet ;
当我尝试编译时,我在一些库标题中出现了一堆错误
但是,如果我删除第三行(descSet
的那一行),代码编译就好了。
有什么问题?不能将boost :: variant对象按照后代顺序排序??
修改
我正在使用Visual Studio 2005和Boost 1.38.0以及以下命令行:
cl /EHsc /I"C:\boost_1_38_0" test.cpp
EDIT2 正如Doug T所建议的,如果我定义这个:
bool operator>(const possibleTypes& a, const possibleTypes& b){
return b < a ;
}
然后以下代码无法编译:
possibleTypes pt1="a", pt2="b" ;
greater<possibleTypes> func ;
cout << func(pt1,pt2) << endl ;
但是,这段代码编译得很好:
possibleTypes pt1="a", pt2="b" ;
cout << (pt1 > pt2) << endl ;
任何人都可以帮我理解为什么吗?
我尝试使用VC ++ 2005和GCC 3.4.6
答案 0 :(得分:3)
它似乎是&lt; operator是为boost :: variant定义的,但不是&gt;运营商。因此也许std :: less&lt;&gt;但不是std :: greater&lt;&gt;
请参阅here
我会尝试定义一个免费的&gt;操作
bool operator > (boost::variant<...> lhs, boost::variant<..> rhs)
{
return (rhs < lhs) // thanks Chris Jester Young
}
答案 1 :(得分:1)
您需要拥有更大的运算符。如果 possibleTypes 没有提供,可以定义像Doug建议的免费版本或尝试使用Boost operators。
答案 2 :(得分:0)
正如所建议的,如果我定义这个:
bool operator>(const possibleTypes& a, const possibleTypes& b){
return b < a ;
}
然后以下代码无法编译:
possibleTypes pt1="a", pt2="b" ;
greater<possibleTypes> func ;
cout << func(pt1,pt2) << endl ;
但是,这段代码编译得很好:
possibleTypes pt1="a", pt2="b" ;
cout << (pt1 > pt2) << endl ;
任何人都可以帮我理解为什么吗?
我尝试使用VC ++ 2005和GCC 3.4.6