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

マップは実装に赤黒木を使用するため、マップのインスタンス化に必要なツリーのタイプを明示的にインスタンス化する必要があります。これは、特に有用なコンパイラフラグであるIMHOのようには見えません。

于 2010-08-09T13:22:07.033 に答える