私は基本的には2つの列挙型の1つでインスタンス化されることが保証されているテンプレートクラスを持っています。今度は、インスタンス化された列挙型に基づいて、イニシャライザでテンプレートパラメータの値を設定します。このような何か:初期化リストのコンパイル時の置換
enum class MyFirstEnum { red, green, orange };
enum class MySecondEnum { blue, yellow, red };
template <class T>
class MyClass
{
static_assert(
std::is_same<T, MyFirstEnum>::value || std::is_same<T, MySecondEnum>::value,
"Template parameter must be either MyFirstEnum or MySecondEnum"
);
public:
MyClass()
: value(std::is_same<T, MyFirstEnum>::value ? MyFirstEnum::red : MySecondEnum::blue)
{
}
private:
T value;
}
しかし、もちろん型が一致しないため、コンパイラは文句と三元は、コンパイル時の代替ではありません。型パラメータに基づいて正しい値を割り当てる方法はありますか?
何か助けていただければ幸いです。私はC++に限定されています11
[値]は、おそらく、すなわち(両方のタイプのインスタンスを保持することはできません'MyFirstEnum'、' MySecondEnum') – nakiya
'MyFirstEnum :: red'と' MySecondEnum :: blue'は両方とも0の値を持っているので、 'value(static_cast(0)'または 'value()'コンパイラにゼロ初期化を依頼してください。 –
@nakiyaもちろん、初期化されたリストに正しい型を記入するために3項があるのはなぜですか?これは実行時チェックであるため、提供されたコードはコンパイルされませんが、 –