2017-02-10 3 views
0

テンプレート関数の本体をヘッダーファイルまたは対応するcppファイルに配置することをお勧めします。なぜですか?ヘッダーまたはcppのテンプレート関数本体

Nikos Athanasiouで書かれた回答のおかげで、少し修正したコードがあります。これはthisスレッドにあり、下に表示されています。現在、以下のすべてのコードが1つのヘッダーファイルにあります。

私は、ヘッダファイルにテンプレート関数定義を持ち、cppファイルにテンプレート関数本体を持たせる方法を説明しているスレッドを読んだが、正しいと思われるのは不思議です。どちらのオプションにもパフォーマンス上の賛否両論はありますか?

typedef std::chrono::duration<float> fsec; 

template<typename F, typename... Args> 
float ftime_fsec(F func, Args&&... args){ 
    auto t1 = std::chrono::high_resolution_clock::now(); 
    func(std::forward<Args>(args)...); 
    return std::chrono::duration_cast<fsec> 
     (std::chrono::high_resolution_clock::now() - t1).count(); 
} 
+0

テンプレートメソッドの場合は、ヘッダーファイルに保持する必要があります。それは何とかインスタンス化されるまでマシンコードにレンダリングできません。コンパイラが具体的な実装がどのように見えるかというアイデアがコンパイラにあるときです。 – tadman

+1

[なぜテンプレートはヘッダーファイルにのみ実装できますか?](http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) – Amadeus

+0

私はその糸を見ました。しかし、スレッドは、ヘッダーファイルに実装を入れる必要はないと明示的に言及しており、同じ答えはcppファイルに配置するための解決方法を提供します。私の質問は天気かどうか、または実装をcppファイルに移動することは適切であるか価値がないのです。ありがとう! – hbchevelle68

答えて

1

ヘッダーファイルに入れるのは間違いありません。これは、冗長コードを入力する手間を省くためのものであり、コンパイラのための一種の「ガイド」の宣言としても使用されます。それは実際にオブジェクトの意味で何も定義していませんが、指定された型の後の定義のためのガイドラインとして役立ちます。

関連する問題