テンプレート化されたnumクラスを構築しようとしています。このクラスには、val
タイプがのパブリック属性が必要T
です。これは、唯一のテンプレートパラメータです。さらに、値を提供する場合は、属性(val
)をこの値で初期化する必要があります。これを行うには、次のコードを作成しました。
#include <iostream>
template<class T>
class Num {
public:
T val;
Num():val(0) { std::cout<<"default constr used"<<std::endl; }
Num(T value):val(value) {std::cout<<"constr (T value) used"<<std::endl; }
~Num() { std::cout<<"destructor used"<<std::endl; }
template<typename U>
Num operator+(const Num<U>& other) {
return val+other.value;
}
};
さらにmain()
、次のようなプログラムをテストする関数を作成しました。
int main() {
std::cout << Num<int>(1) + Num<double>(2.0);
return 0;
}
しかし、プログラムの結果は今3
です。それが3.0
(タイプのdouble
)であることを期待したのに対し。
これはそのままではコンパイルできません。
—
Ted Lyngmo
コンパイルエラーが発生するのはなぜですか?
—
ファンカルロスラミレス
@JuanCarlosRamirezクラスにはという名前のメンバー変数がないため
—
Ted Lyngmo
value
。
あなたは正しい、それを見なかった。
—
ファンカルロスラミレス
Num<int>(1) + Num<double>(2.0);
たものと同じNum<int>(1).operator+(Num<double>(2.0))
ですNum<int>
。