8

<class>Iパスに応じてクラスを形成できるテンプレート クラスを作成しようとしています。.h問題は、同じファイルで宣言および定義できないことです。私のプロジェクトでは、UTF ツールは.cppファイル (コード カバレッジなど) でのみ機能します。.cppブログで「の代わりに追加」と言っているのを見たことがあり.hます。これは賢明ですか?

Template.h

#ifndef TEMPLATE_H_
#define TEMPLATE_H_

template<class T>
class Template
{
public:
    T Add(T a,T b);
};

#endif /* TEMPLATE_H_ */

Template.cpp

#include "Template.h"

template<class T>
T Template<T>::Add(T a, T b)
{
    return a+b;
}

Main.cpp

#include "Template.cpp" //Is this a good practise? 
#include <iostream>

int main(int argc, char **argv) {
    Template<int> obj;
    std::cout<<obj.Add(3,4)<<std::endl;
}

これが望ましくない場合、どうすればこの問題を解決できますか? export?

4

2 に答える 2

7

コンパイラは、テンプレート クラスをインスタンス化するためにメソッドの実装にアクセスする必要があるため、最も一般的な方法は、テンプレートを宣言するヘッダー ファイルにテンプレートの定義を含めるか、ヘッダー ファイルで定義することです

テンプレートをヘッダー ファイルにしか実装できないのはなぜですか? を参照してください。

于 2013-03-22T18:41:59.073 に答える
4

テンプレートは、それが使用されるすべての翻訳単位で定義する必要があります。つまり、ヘッダー ファイルで定義する必要があります。あなたのツールが extension を主張するなら.cpp、あなたがしたようにそれを提供することもできます。

.hこの場合、疑似ヘッダーをandに分割する必要さえありません.cpp。あなたはそれをすべて入れることができ.cppます#include

于 2013-03-22T18:38:39.913 に答える