我正在嘗試使用enum class
,但發現從與枚舉邏輯對應的其他類型轉換時遇到困難。這裏有一個例子:在初始化時將'char'轉換爲枚舉
enum class ElementType {
unknown,
signedInt
};
struct VectorType {
int vectorSize;
ElementType elementType;
int elementSize;
}
我希望能夠初始化說
VectorType vt {4, 's', 32};
所以我試圖從焦炭中定義轉換操作,以枚舉像這樣一個VectorType
:
operator ElementType(char c) {
switch (c) {
case 's': return ElementType::signedInt;
default : return ElementType::unknown;
}
}
但是這並不奏效,因爲它給出了以下錯誤:
error: ‘operator ElementType(char)’ must be a nonstatic member function
因此,唯一的解決辦法,我能想出是創建一個單獨的構造器:
VectorType(int vsz, char etp, int esz) {
vectorSize = vsz;
elementType = make_elementType(etp);
elementSize = esz;
}
,並有全球非會員make_elementType()函數處理與轉換。有沒有辦法避免這種情況,即是否有辦法使用VectorType vt {4, 's', 32};
來初始化VectorType
?
感謝
我不知道!謝謝。我創建了一個構造函數,將char作爲第二個參數,然後使用static_cast將參數轉換爲ElementType。我仍然可以稱它爲'VectorType vt {4,'',32};' –
stanm