2010-08-09 79 views
5

我想用g ++ 4.4编译并链接使用STL的简单程序。 我正在尝试使用-fno-implicit-templates,因此所有模板都必须显式实例化。std :: map和-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; 
} 

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

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

回答

7

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

+3

我同意尼尔:这个标志的问题是,你需要明确地实例化类的每个组件,这暴露你实现的每一个细节... URK。你很幸运,开始使用STL非常简单,用一个强大的库文件来尝试它,在你编译成功之前,你将会哭泣你所有的眼泪。 – 2010-08-09 13:24:38

+4

+1一个更诚实的国旗名称将会是 - 你已经选择了痛苦的方式 – 2010-08-09 16:18:56

+0

@chrispy:如果编译器在Christopher Lee的声音中读出它会更好。 – Peter 2010-08-11 02:44:43