エクスポートテンプレートは、テンプレートの実装が別のソースファイルに引き渡される2011年以前のC++の機能です。エクスポートテンプレートはどのように実装されますか?
According to this articleの場合、実装ファイルで使用されているタイプごとに手動で指定して「マニュアル」エクスポートテンプレートを作成することができます。これは特定のシンボルを作成するだけなので、オーバーロードされた関数と同様の方法であると考えられます。これがどのように実装されるのかは理解できます。
エクスポートされたテンプレート(export
キーワードによる)は任意です。任意のタイプのデータを渡すことができます。
この単純な例取る:Tはint
、float
、又は特にstd::string
(及び+
演算子をオーバーロード任意の他のタイプ)であった場合、この例の組立出力が乱暴に異なるであろう
template<typename T>
T add(T value1, T value2) {
return value1 + value2;
}
を。
これは完全に恣意的なので、コンパイラはどのようにこのキーワードを実装しますか?
私の推測はリンク時のコード生成であり、コードの表現を含むカスタムオブジェクトファイル形式を必要とする可能性が高いです。しかし、これはリンカをコンパイラにもして、プリプロセッサ - コンパイラ - リンカの分離を破ります。