我需要用其原始源代码替换分配器。我正在从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)


如何从上述冗长的分配器返回其原始源代码? (typedef的大小增加了。)

问候,

乌斯曼

最佳答案

我认为您的意思是您希望能够从导出表中确定一个更简洁的类型名称。在大多数标准容器类模板中,标准分配器(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)

关于c++ - 如何用实际的源代码替换STL的分配器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3346526/

10-11 00:49