5

我正在尝试使用 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;
}

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

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

4

1 回答 1

7

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

于 2010-08-09T13:22:07.033 回答