テンプレートパラメータに基づいてメンバー変数を含める/除外することはC++で可能ですか?
次に例を示します。
template< class T >
class RealNumber
{
T real;
};
template< class T >
class ComplexNumber
{
T real;
T imag;
};
これらには多くの共通プロパティがあるため、数値を表すクラスを 1 つだけ持つ (追加のテンプレート パラメーターを使用) ことで、コードの重複を防ぐことができます。
私がやりたかったことは次のようなものです
template< class T , class U >
Number
{
T real;
// If U is not void
U imag;
}
したがって、2 番目のパラメーターが void の場合、imag という名前のメンバーは存在せず、次のようになります。
sizeof( Number< T , void > ) == sizeof( T )
enable_if を試しましたが、結果が得られませんでした。
これが不可能な場合、これを可能にするハックはありますか?