私のような列挙型があります。C++ 11型から列挙型マッピングへ?
enum E
{
TYPE_FLOAT,
TYPE_CHAR,
TYPE_INT
}
をそして私のようなタイプのために適切なEを取得するために、コンパイル時のマッピングを作成します:
template<class T> struct GetE;
template<> struct GetE<float> { static constexpr E type = TYPE_FLOAT; };
template<> struct GetE<char> { static constexpr E type = TYPE_CHAR; };
template<> struct GetE<int> { static constexpr E type = TYPE_INT; };
:私は考え
GetE<float> // returns TYPE_FLOAT
GetE<char> // returns TYPE_CHAR
GetE<int> // returns TYPE_INT
でも、次のようなエラーが表示されます。
undefined reference to `GetE<int>::type'
これを行うにはどうすればよいですか?そしてなぜそのエラー?
これは妥当と聞こえます。私は 'tmpl E GetE()'のような関数テンプレートを使い、その代わりにそれを専門にするように変更しました。これはそれを修正しました。ありがとう。 –
@jogojapanあなたのコメントから勉強しようとしていますが、最後のコードを使用してエラーが表示されません:http://liveworkspace.org/code/4oTEis何が欠けていますか? –
@ShafikYaghmour '-O2'コンパイラフラグが原因です。参照を最適化します。良いコメントですが、答えに言及します。 – jogojapan