2017-04-26 12 views
1

オーバーインライン化によるコードbloadを避けるために...
がインライン関数のように機能するテンプレート関数を実装する有効な方法ですか?C++ヘッダー専用ライブラリのインライン関数とテンプレート関数

オリジナルインライン関数の宣言:

inline double MyInlineFunction(){ 
     return 3.141592653589; 
} 

テンプレート機能を使用して代替関数宣言:

template<typename T = void> double MyInlineFunctionT(){ 
    return 3.141592653589; 
} 
+1

コンパイラがコードを最適化するのに「インライン」を使用していないことを望みますが、リンカの目的のために実行しています。 –

+1

これは現代のコンパイラでは時間の無駄だと思われます。現代のコンパイラは、インライン(おそらくヒントとしてのキーワードを使用して)について、ケースバイケースで独自の決定を下すでしょう。さらに、現代のコンパイラは、通常、未使用のコードを排除することができます。 –

+0

プロポーザルをリンクするためだけに、関数の実装によって別のcppソースファイルを配布してコンパイルしないようにします。 –

答えて

2

機能inlineマーキングは、それがよりに定義された同じ機能を持ってしても大丈夫ですコンパイラーに指示します1つの翻訳単位よりも関数がインラインで拡張されるべきであるというヒントもありますが、ほとんどのコンパイラはその点で独自の判断を下します。同様に、テンプレート関数は複数の翻訳単位でインスタンス化することができ、コンパイラはインラインで展開するかどうかについて独自の判断を下します。

短いバージョン:コードサイズに違いはありません。しかし、テンプレートのバージョンは理解しにくく、コンパイルが難しく、使用するのが難しく、エラーが発生する可能性が高くなります。

関連する問題