Как заменить распределители stl реальным исходным кодом - PullRequest
0 голосов
/ 27 июля 2010

Мне нужно заменить распределители их исходным кодом.Я извлекаю экспортированные методы из таблицы экспорта PE и сталкиваюсь со странными длинными распределителями, где контейнеры STL использовались в исходном исходном коде.то есть, если исходный код был:

   typedef std::list<std::basic_string<_TCHAR> > TokenList;
   EXPORTS_API const TokenList& getLiteralList( );

из таблицы экспорта, я получаю:

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short>,class
 std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned 
short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void)

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

С уважением,

Усман

Ответы [ 2 ]

1 голос
/ 27 июля 2010

Я думаю, вы имеете в виду, что вы хотите иметь возможность определить более краткое имя типа из таблицы экспорта.Стандартный распределитель (std::allocator) является параметром шаблона по умолчанию для параметра распределителя в большинстве стандартных шаблонов классов контейнеров, поэтому вы можете просто удалить весь параметр распределителя из специализации шаблона, чтобы получить более простое выражение того же типа.

Например

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short>,class
std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned 
short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void)

становится

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short> > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void)
0 голосов
/ 27 июля 2010

Я полагаю, вы говорите о расшифровке сообщений об ошибках?Попробуйте STLFilt .

...