2016-06-07 35 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

你試過'汽車&'而不在乎嗎? – nwp

+0

@nwp哇,謝謝。現在我知道'auto'有什麼用處了。如果你作出答覆,我會接受它。不過,如果知道如何閱讀這些令人困惑的Boost文檔,那麼知道實際的類型是什麼會很好。 – DBedrenko

+2

'boost :: bimaps :: bimap :: left_map&lmap'怎麼樣? – Hummingbird

回答

2

您可以使用auto &讓編譯器做的工作適合你。
如果你想知道推導出的類型,你可以使用其中的一個技巧from here來讓編譯器告訴你。

0

boost/bimap/bimap.hpp對此有一個typedef:left_mapright_map。所以你可以這樣做:

paramIDStrings::left_map &paramIDStringsByID = paramIDStrings.left;