1

クラスをシンプルに保ち、コンストラクターを定義しないようにしたいので、 Pt data = {0, 5}; を実行できます。だから私は、Pt_tを短いものから長いものに、またはその逆に変換する最良の方法は、このようなことをすることだと考えました。

template <class T>
struct Pt_t
{
    T x, y;
    template <class T2> operator Pt_t<T2>() { Pt_t pt = {x, y}; return pt; }
};

コンパイラはこれを好まず、リターン pt で演算子 Pt_t を呼び出します。したがって、スタックオーバーフローが発生します。どうすればこれを防ぐことができますか? 私が考えることができる唯一の解決策は、Pt_t pt = {1, 2}; を削除する Pt_t にコンストラクターを使用させることです。できれば保持したいものです。

4

2 に答える 2

5

関数本体の修飾されていない Pt_t は であると確信していますがPt_t<T>、 になりたくありませんPt_t<T2>か? 明示的に修飾する必要があります。

于 2008-12-22T13:40:51.693 に答える
1

私は C++ に慣れていませんが、メソッドで正しい型を宣言していますか?

Pt_t<T2>ただの代わりにすべきではありませんPt_tか?

于 2008-12-22T13:40:18.323 に答える