数値データ型で使用するためのテンプレート変換関数が用意されています。その中には、ポインタのような型でコンパイルされないようにする構造体が含まれています。C++のenumの乗算はどのように機能しますか?
template<class To, class From>
To ConvertTo(From what)
{
assert(2 * what == what * 2); // this will not compile for pointers
//skipped
}
この関数は、コンパイルされ、列挙型は、2番目のテンプレートパラメータとして渡されたときにオールライト動作します:VC++ 7に意図したとおりに
enum TSomeEnum {
SE_First,
SE_Second
};
TSomeEnum enumValue = SE_First;
int result = ConvertTo<int>(enumValue);
上記のコードはコンパイルして実行します。
操作*はどのように列挙型で機能しますか?それは未定義の振る舞いの方法ですか?
列挙型のすべての値を格納できる基本的な整数型に列挙する列挙型です。 Degrate to 'int'はC++では正しくありません。 –