R Sahuの答えが正しいですが、私はそれがA
以上1つのインスタンス化されたテンプレート引数があり、特にA<T>
、同じでない場合を説明するために良いことだと思います。
たとえば、2つのテンプレート引数を持つテンプレート化クラスのコピーコンストラクタを記述する場合、引数の順序が重要なため、オーバーロードのテンプレート化された型を明示的に書き出す必要があります。ここで
は、 "キー/値" 型クラスでの例です:あなたの教科書であっ例は
#include <iostream>
// Has overloads for same class, different template order
template <class Key, class Value>
struct KV_Pair {
Key key;
Value value;
// Correct order
KV_Pair(Key key, Value value) :
key(key),
value(value) {}
// Automatically correcting to correct order
KV_Pair(Value value, Key key) :
key(key),
value(value) {}
// Copy constructor from class with right template order
KV_Pair(KV_Pair<Value, Key>& vk_pair) :
key(vk_pair.value),
value(vk_pair.key) {}
// Copy constructor from class with "wrong" template order
KV_Pair(KV_Pair<Key, Value>& vk_pair) :
key(vk_pair.key),
value(vk_pair.value) {}
};
template <class Key, class Value>
std::ostream& operator<<(std::ostream& lhs, KV_Pair<Key, Value>& rhs) {
lhs << rhs.key << ' ' << rhs.value;
return lhs;
}
int main() {
// Original order
KV_Pair<int, double> kv_pair(1, 3.14);
std::cout << kv_pair << std::endl;
// Automatically type matches for the reversed order
KV_Pair<double, int> reversed_order_pair(kv_pair);
std::cout << reversed_order_pair << std::endl;
}
See it live on Coliru.
ませんか? – Barmar
@Barmarこの特定の問題では見つかりませんでした。 – Dannz
私はどちらの構文もhttp://stackoverflow.com/questions/7638296/how-to-write-template-class-copy-constructorとhttp://stackoverflow.com/questions/19167201/copy-constructor-テンプレートクラスの – Barmar