2016-06-07 4 views
0

Я использую boost::bimap для отображения целых чисел в строки:Как сделать ссылочную переменную для boost :: bimap.left?

typedef boost::bimap<int, std::string> ParamIDStrings; 
typedef ParamIDStrings::value_type id_pair; 
extern const ParamIDStrings paramIDStrings; 

Я пытаюсь создать эталонные переменные, так что я могу написать код:

paramIDStringsByID.at(5); 
// Instead of having to remember which side is which: 
paramIDStrings.left.at(5); 

Но я с трудом интерпретируя Boost documentation, чтобы понять, какой тип bimap::left есть.

Я пробовал:

// Compiler throws error: invalid use of template-name 'boost::bimaps::bimap' without an argument list 
boost::bimaps::bimap::left &paramIDStringsByID = paramIDStrings.left; 

// Compiler throws error: 'paramIDStrings' does not name a type 
paramIDStrings::left_map &paramIDStringsByID = paramIDStrings.left; 

// Compiler throws error: invalid initialization of reference of type boost::bimaps::bimap<int, std::__cxx11::basic_string<char> >::left_map 
boost::bimaps::bimap<int,std::string>::left_map &cParamIDStringsByID = cParamIDStrings.left; 
+1

Вы пробовали 'auto &' и не заботились? – nwp

+0

@nwp Whoa, спасибо. Теперь я знаю, для чего «авто» полезно. Если вы ответите, я приму это. Тем не менее, было бы хорошо знать, каков фактический тип, если только узнать, как черт почитать эти запутанные документы Boost. – DBedrenko

+2

как насчет 'boost :: bimaps :: bimap :: left_map & lmap'? – Hummingbird

ответ

2

Вы можете использовать auto &, чтобы компилятор делать работу за вас.
Если вы хотите узнать тип, который выведен, вы можете использовать один из трюков from here, чтобы компилятор сказал вам.

0

boost/bimap/bimap.hpp имеет typedef для этого: left_map и right_map. Так вы можете сделать:

paramIDStrings::left_map &paramIDStringsByID = paramIDStrings.left; 

 Смежные вопросы

  • Нет связанных вопросов^_^