2016-11-19 3 views
0

私はvisual studio 2015でC++をコーディングしています。私はsuperpixel.hとsuperpixel.cppというファイルを持っています。私はいくつかの関数にテンプレートを使いたいと思っていましたが、私はcppファイルでテンプレートを定義することはできません。ヘッダーファイルにテンプレートを定義したくないのは、ヘッダーファイルとcppファイルの定義でコードが乱雑になるからです。cppのテンプレート関数

この問題を回避する方法はありますか?すべてのcppファイルをhppに切り替える必要がありますか?

+0

一部は、.hファイルの下部に含まれる.inl(インライン)ファイルを作成します。このファイルには、すべてのテンプレートメソッドが含まれます。 – Shaggi

+0

私はテンプレートを最初に学んだとき、これについて少し迷惑をかいていました。信じられないように聞こえましたが、私はGoogle-ingをいくつか行いました。ヘッダーの実装を行うのはかなり標準的なようでしたので、私はそれを受け入れました。 –

答えて

0

テンプレートを使用するものは、テンプレートにアクセスする必要があります。つまり、テンプレートを含める必要があります。私が見てきたことの大部分は、定義全体をヘッダに入れることですが、他のファイルに移動してインクルードすることもできます。ヘッダーファイルをクラスごとに1つずつ保持しておけば、うまくいけばそれほど厄介ではありません。

すべてのcppファイルをhppに切り替える必要はありません。それらは単なる拡張であり、主に重要ではありません。あなたのコードが主にテンプレートである場合にのみヘッダーを使用することを検討したいかもしれませんが、テンプレートコードはヘッダーになければならず、ヘッダーのみのプロジェクトは通常、リンクすることを心配する必要がないため、 。

+0

これは貧弱なアドバイスです。ヘッダーとソースの全体のポイントは、ヘッダーファイルをインクルードすると、ヘッダーの要求された部分だけがインクルードされるため、インクルードがヘッダー内のコード全体よりも大幅に小さくなることです。 – matt2405

+0

ヘッダーのみのライブラリは、実際には非常に一般的な方法です。 [Boost](http://www.boost.org/)を参照してください。これはおそらく最もよく使われるC++ライブラリです。しかし、それは主に作者の責任です。伝統的なルートとダイナミックリンクは、時には非常に便利です。しかしどちらの方法でも、テンプレートコードはヘッダーファイルに含まれている必要があります。テンプレート特殊化が他の場所で定義されている場合は、少なくとも基本テンプレート。その後、必要に応じてこれらの専門分野を含める必要があります。 – danielunderwood

関連する問題