std :: map和-fno-implicit-templates

zee*_*hio 5 c++ stl instantiation stdmap

我试图用g ++ 4.4编译并链接一个使用STL的简单程序.我正在尝试使用-fno-implicit-templates来完成它,因此必须显式实例化所有模板.

我不明白为什么这段代码有效:

#include <map>
//template class std::map<char,char>;
template class std::_Rb_tree<char, std::pair <char const, char>,
               std::_Select1st<std::pair<char const, char> >, 
               std::less<char>, std::allocator<std::pair<char const, char> > >;

int main() {
   std::map <char,char> table;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望这个程序需要行:template class std::map<char,char>;但是该行不会使程序链接.这std::_Rb_tree line是必要的.为什么?

在此先感谢,任何提示将不胜感激.

小智 7

地图在其实现中使用红黑树,因此您必须显式实例化地图实例化所需的树类型.这看起来不像是一个特别有用的编译器标志,恕我直言.

  • +1一个更诚实的国旗名称将是 - 你已经选出了痛苦的方式 (4认同)
  • 我同意Neil:这个标志的问题是你需要显式地实例化类的每个组件,这会暴露你实现的每一个细节...... URK.你很幸运,从STL开始这很简单,尝试使用重型升级库,你会在你成功编译之前哭掉你身体的所有泪水. (3认同)