この質問の起源がテンプレート概念そのものの私の深遠な欠如にあるなら、本当にすみません。なぜ私はテンプレートクラスをC++で使用するために特殊化する必要がありますか?
私は以下のクラスを定義しました。
:単純なテンプレート・テストを行うためには#include <iostream>
template <typename T>
class T3B_data{
public:
T3B_data<T>();
~T3B_data<T>();
void fromText(std::istream& is);
void fromText(const std::string& textPath);
void fromBinary(std::istream& is);
std::ostream & toText(std::ostream& oStream)const;
std::ostream & toBinary(std::ostream& oStream);
friend inline std::ostream& operator << (std::ostream & oStream,const T3B_data<T> & data){
return data.toText(oStream);
}
private:
T * mObj;
};
は、私が追加することによって明示的にテンプレートをインスタンス化しなければならなかったなかった理由を得ることが
#include "T3B_data.h"
int main(void){
T3B_data<int> * myData = new T3B_data<int>();
return 0;
}
私はトンをドンインスタンス化するために、メイン次のことを試してみました
template class T3B_data<int>;
コンパイラがクラスコンストラクタを見つけるためのヘッダーファイルの最後にあります。
注:
私はラインを追加すると、実際には、まったく新しいクラスの生成を強制することを十分に認識してメートル。私はちょうどメインのコードが実際にコンパイルレベルでテンプレートインスタンスを強制していない理由を得ることはできません。
注2:
STLコンテナを使用しているとき、私は自己定義型などでそれを使用するたびに、それをインスタンス化する必要はありませんので、私は、イムは、何か間違ったことをするかなり確信している:
struct myStruct{
int a;
std::string;
};
std::vector<myStruct> a;
この質問に興味を持っている人には、事前に感謝します。
EDIT:私は主に私のヘッダファイルを移動し、宣言の終わりに、{}を使用して実装をスタブとして
何かが、私の実装では全く間違っている必要があります。テンプレートクラスT3B_dataなしですべてが正常にコンパイルされます。宣言。 separating constructor implementation with template from header file
あなたの混乱の理由は明らかではありません。あなたのtempateクラスは、STLのテンプレートと全く同じ方法で使用できます。例えば、 – user3159253
。変数 'T3B_data t3b;'を 'std :: vector r ;; –
user3159253
のように作成することができます。逆の場合もあります:STLテンプレートであれ、ユーザ定義であれ、明示的なテンプレートパラメータの特殊化が必要です。新しい割り当ては – user3159253