1

(これは重複しているに違いないと思いますが、見つかりません)。

検討:

飛行機.hpp:

template<class T>
void wings();

void tail();

さて...どこで定義 wings()し、tail()? それらを同じ場所で定義したいと思います。wings()テンプレート化されていて、そうでないという事実については考えたくありtail()ません。たぶん、私が時々書く理由がわかるでしょう:

飛行機.hpp:

template<class T>
void wings();

void tail();

#ifndef airplane_cpp
#define header
#endif
#include "airplane.cpp"

飛行機.cpp:

#define airplane_cpp
#include "airplane.hpp"

template<class T>
void wings() { }

#ifndef header
void tail() { }
#endif

しかし、確かにそれは最善の方法ではありません。

編集:私がTI DSPチップでプログラミングしていることを追加することは関連があるようです。ドキュメントによると、inlineキーワードは生成されたコードに定義された結果をもたらします:

inline キーワードは、標準の呼び出し手順を使用するのではなく、関数が呼び出された時点でインライン展開されることを指定します。コンパイラは、inline キーワードで宣言された関数のインライン展開を実行します。

4

2 に答える 2

2

それらを作成すると、ヘッダー内のすべての関数を定義できますinline

template<class T>
inline void wings() {}
// inline not really needed here, but if you don't want to think about it...

inline void tail() {}
于 2012-07-03T23:38:00.097 に答える
1

exportテンプレートの前にあるキーワードを使用して、目的を達成できます。残念ながら、このキーワードはコンパイラ全体でかなりのサポートを得ていません。

つまり、実際には、ヘッダーファイルでテンプレートの本体を定義する必要があります。

私の見解では、コンパイラベンダーは、関数にもテンプレートにも使用されるのと同じパラダイムを実装するように努力する必要があります。つまり、インターフェイスの説明はヘッダーファイルに、本体の説明はcppファイルに残す必要があります。リンク中にすべてを組み合わせる必要があります。彼らはこれをしていません。今日のように、関数とテンプレートのパラダイムは異なります。テンプレートはcompile time onyエンティティです。

于 2012-07-03T23:44:21.377 に答える