我有一個模板類,確保基本上只能用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
'value'不可能保持兩種類型的實例(即'MyFirstEnum','MySecondEnum') – nakiya
'MyFirstEnum :: red'和'MySecondEnum :: blue'的值均爲0,所以也許只需使用'value(static_cast(0)'或者'value()並讓編譯器爲你初始化它 –
@nakiya當然,爲什麼在初始化列表中存在三元組來填充正確的類型,所提供的代碼將不會編譯,因爲這是一個運行時檢查,但它需要編譯時檢查 –