私はこのコードC++ - 自動鋳造はstd ::文字列にする
template <typename T>
class KeyValueProperty {
protected:
T value = T();
std::string key = "";
public:
KeyValueProperty(const std::string & key) : key(key) { }
T & operator = (const T &i) { return value = i; };
operator const T &(){ return value; };
};
struct T2 {
KeyValueProperty<std::string> x {"x"};
KeyValueProperty<double> y {"y"};
};
とメイン
T2 tx;
tx.x = "hellow";
tx.y = 10;
std::cout << static_cast<std::string>(tx.x) << ::std::endl;
std::cout << tx.y << ::std::endl;
にこれが正しく動作しているがあります。しかし、やってこれだけ
std::cout << tx.x << ::std::endl;
は
エラーC2679になってしまいます。何のオペレータが 『テスト:: KeyValueProperty』タイプの右辺のオペランドをとる見つからない(「< <」BINARYまたは 許容される変換はありません)
自動変換は可能ですか、手動でキャストする必要がありますか?
しかし、これがなくても二重出力はなぜですか? –
@MartinPerry KeyValuePropertyにはT&への暗黙の変換演算子があります。 –
しかし、この暗黙的な変換がdoubleのために働いている場合、std :: stringではなぜ機能しないのですか? –