2011年12月19日月曜日

外部テンプレート

templateにexternを指定する

ある翻訳単位で完全に引数が特定されたテンプレートが見つかると、コンパイラはそのテンプレートを実体化します。このテンプレートの実体化によりコンパイル時間を増加させます。同じ引数を指定したテンプレートが複数の翻訳単位で実体化されるときは、非常に時間を取られます。

これを解消するために、特定の翻訳単位でテンプレートの実体化をしないように指定することができます。次のサンプルのようにtemplateにexternを指定することで、コンパイル時にtemplateを実体化しません。

extern template class std::vector<ClassA>;

問題点

ただし、当然コンパイル・リンクされたバイナリ内に一つ以上の実態が存在している必要があります。その実態をどこで定義するかをコーディング規約などで取り決める必要があります。

本当は・・・

このぐらいの最適化、コンパイラやリンカで自動的に行なってくれればいいのですが、作りの問題でできないのでしょうか。

TODO

テンプレートの実態をどこで定義するかをどのように取り決めればいいのだろうか?

0 件のコメント:

コメントを投稿