大規模なプロジェクトでは、多数 (数千) のクラスがあり、それぞれに特別なスマート ポインター型が typedef を使用して定義されます。このスマート ポインター型はテンプレート クラスです。「gcc -Q」でコンパイルすると、各クラスのこれらのスマート ポインターのコンパイルに多くの時間が費やされていることがわかります。つまりsmartptr<class1>::methods, then smartptr<class2>::methods... smartptr<class2000>::methods
、gcc がそれらを処理するときに画面がスクロールするのが見えます。
このプロセスをスピードアップするためのトリックはありますか? これらのクラスは、smartptr の観点からはすべて同じであり、enable_if トリックなどはありません。
私が今しようとしていること:
- おそらく、いくつかの一般的なメソッドを使用して、非テンプレートの基本クラスを作成します
- extern テンプレート クラスを使用してリンク シンボルを削減します (インスタンス化時間はまだわかりません)。
しかし、上記のすべてが完全な解決策ではありません。コンパイル時間を最適化する別の方法、たとえば smartptr を一度解析した場合、生成コードが同じであるため、他の特殊化を見るときに同じ知識を何度も適用できることを gcc に知らせるトリックがあるのではないかと思います。
はい、もちろんまったく同じではないことはわかっています...しかし、それはただのクレイジーなアイデアです。
または、私が気付いていない他のトリックがあり、コンパイルを高速化できる可能性があります。(私が話していることのアイデアを示すために、静的メンバー データのインスタンス化を排除することで、別のテンプレートを最適化することができました。これにより、コンパイル時間が大幅に短縮されました。これはまったく明らかではありませんでした。)