std :: set заполненный элементами Boost :: Option не может быть отсортирован потомками? - PullRequest
1 голос
/ 14 апреля 2009
typedef boost::variant<long long,double,string> possibleTypes ;

set<possibleTypes,less<possibleTypes> > ascSet ;
set<possibleTypes,greater<possibleTypes> > descSet ;

Когда я пытаюсь скомпилировать, я получаю кучу ошибок в некоторых заголовках библиотеки.
Но если я удалю третью строку (ту, что с descSet), код скомпилируется просто отлично.

В чем проблема? Невозможно повысить :: варианты объектов, отсортированных в порядке убывания ??

Edit:
Я использую Visual Studio 2005 и Boost 1.38.0 и следующую командную строку:

cl /EHsc /I"C:\boost_1_38_0" test.cpp

Edit2 Как было предложено Дагом Т., если я определю это:

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

Ответы [ 3 ]

3 голосов
/ 15 апреля 2009

Похоже, оператор <определен для boost :: option, но не оператор>. Таким образом, возможно, std :: less <> работает, но не std :: больше <>

См. здесь

Я бы попробовал определить свободный> оператор.

bool operator > (boost::variant<...> lhs, boost::variant<..> rhs)
{
    return (rhs < lhs) // thanks Chris Jester Young
}
1 голос
/ 15 апреля 2009

Вы должны иметь больший доступный оператор. Если возможных типов не предоставляет один, вы можете либо определить свободный, как предложил Дуг, либо попробовать использовать операторы повышения .

0 голосов
/ 15 апреля 2009

Как было предложено, если я определю это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...