私は、恐ろしくネストされ、特殊化されすぎたテンプレート化された C++ コードを削減して単純化しようとしています。そのために、関数またはクラスがインスタンス化されたテンプレート化された型に依存するメンバー型を宣言できるようにしたいと考えています。
次のジェネリック クラス テンプレートを、テンプレートの特殊化の結果とします。'a' のタイプは、インスタンス化のタイプによって異なります。
template <typename Float> class A;
template <>
class A<double> {
double a;
}
};
template <>
class A<float> {
float a;
}
};
template <>
class A<short> {
float a;
}
};
これらのクラスは、「a」の型、テンプレート型から型へのマッピングが double->double、float->float、および short->float であることを除いて同一です。このマッピングを単純にカプセル化して、クラスを 1 回だけ記述できるようにする方法はありますか?
次のようなものを書きたいと思いますが、これが可能かどうかはわかりません。
typedef double Float2<double>;
typedef float Float2<float>;
typedef float Float2<short>;
template <typename Float>
class A {
Float2<Float> a;
}
};
注: 私は C++03 を使用しており、この目的で C++11 を使用することはできません (ここでは decltype が役立つ可能性があると思いますが、よくわかりません)。