Я использую библиотеку, которая имеет:
typedef std::map<std::wstring, std::vector<std::wstring>* > XmlRecord_t;
Когда я выполняю итерацию на этой карте, я создаю переменные, такие как:
std::wstring& key( mapIter->first );
std::vector<std::wstring>* values( mapIter->second );
, что вполне нормально.Затем я хочу перебрать значения, поэтому у меня есть цикл for
, такой как:
for( std::vector<std::wstring>::const_iterator it = vals->cbegin();... )
, который в порядке и работает хорошо.
Теперь, как любопытство, яХотелось бы повторно использовать имена typedef
библиотеки, в случае изменения определения typedef
, или для чистоты.Другими словами, я хотел бы использовать:
typedef XmlRecord_t::mapped_type VecPtr;
VecPtr values( mapIter->second )
вместо:
std::vector<std::wstring>* values( mapIter->second );
Это работает до сих пор.Единственная проблема связана с циклом for
.Мой typedef
- это указатель на vector
, а не просто vector
.Поэтому я не могу использовать это typedef
для замены:
std::vector<std::wstring>::const_iterator
любым способом, о котором я знаю.
Следовательно, мой вопрос обобщается так: если у вас есть библиотека (код, который я делаюне позволяет изменять):
typedef map<KEY, T*> Map2Ptrs
как вы можете использовать Map2Ptrs
в своем коде для получения T
(без указателя)?Чтобы сделать typedef
типа T
?
Очевидно, что авторам библиотеки следовало бы создать:
typedef std::vector<std::wstring> XmlRecordVals;
typedef std::map<std::wstring, XmlRecordVals* > XmlRecord_t;
.Но у меня есть только оригинальный XmlRecord_t, с которым можно работать; (