私はいくつかの奇妙な動作に遭遇しました。これがうまくいくかどうかわからない。私はそれを機能させるつもりではないことに注意してください、私はむしろ理論的側面に関心を持っています。私は明らかにテンプレートクラスSequenceCheckResultがdirectiontypeという名前の列挙型を含むVisual C++ 2010を使用して、次のコードにC++テンプレートとオーバーロード演算子
template <class T_>
ostream &operator <<(std::ostream &out,
typename SequenceCheckResult<T_>::directiontype const &direction) {
switch(direction) {
case SequenceCheckResult<T_>::None:
out<<"none o";
break;
case SequenceCheckResult<T_>::Horizontal:
out<<"horizontal _";
break;
case SequenceCheckResult<T_>::Vertical:
out<<"vertical |";
break;
case SequenceCheckResult<T_>::ForwardDiagonal:
out<<"forward diagonal \\";
break;
case SequenceCheckResult<T_>::BackwardDiagonal:
out<<"backward diagonal /";
break;
}
return out;
}
を守っています。上記のコードはインスタンス化されず、変数の整数値が出力されます。私が専門性を提供しても、それはまだ機能しません。次の関数を作成すると、その関数が使用され、テキスト値が出力されます。上記の関数の次のコードとintの特殊化は、template<>
行と<int>
の次のコードがoperator <<
と異なることに注意してください。
ostream &operator << (std::ostream &out,
SequenceCheckResult<int>::directiontype const &direction) {
switch(direction) {
case SequenceCheckResult<int>::None:
out<<"none o";
break;
case SequenceCheckResult<int>::Horizontal:
out<<"horizontal _";
break;
case SequenceCheckResult<int>::Vertical:
out<<"vertical |";
break;
case SequenceCheckResult<int>::ForwardDiagonal:
out<<"forward diagonal \\";
break;
case SequenceCheckResult<int>::BackwardDiagonal:
out<<"backward diagonal /";
break;
}
return out;
}
私は考えられる原因があり、これがなぜ起こるか知りたい:
- コンパイラのバグ
- 実装は、この動作
- 基準は、私が何か をしないのです。この動作
- を定義定義
ありがとうございましたvance
もっとコードしてください。これをどのように呼んでいるのか教えてください。 – jmucchiello
@jmucchiello:std :: cout << obj.direction; –