[英]C++ - Use enum from template class without template parameter
template<typename T> class SomeClass{
public:
enum SomeEnum{ SOME_FLAG};
};
SomeClass::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass<int>::SomeEnum::SOME_FLAG; //YES
這不會編譯,因為
類SomeClass,不帶模板參數
沒有模版參數,沒有辦法/解決方法使用它,有點使該類的枚舉成為全局類,因此它不依賴於該參數。
不是我不能輸入它們,而是它們可能又長又復雜,代碼將更難閱讀,在這里我不能使用諸如auto之類的東西。 (我是模板的新手,如果這個問題很me腳,抱歉。)
如果出於某種原因 (我不能說真正的問題)要將枚舉括在類定義中,您仍然可以引入一個不是類模板並且包含枚舉的類,然后使用您的類模板繼承該類。 就這樣。
舉個例子:
struct SomeBase {
enum SomeEnum { SOME_FLAG };
};
template<typename>
struct SomeClass: SomeBase {
// ...
};
用這個:
SomeBase::SomeEnum::SOME_FLAG;
代替這個:
SomeClass::SomeEnum::SOME_FLAG;
每當您想直接訪問枚舉時。
無論如何,以下內容仍然有效:
SomeClass<void>::SomeEnum foo = SomeClass<void>::SomeEnum::SOME_FLAG;
using MySomeClass = SomeClass<int>;
MySomeClass::SomeEnum foo = MySomeClass::SomeEnum::SOME_FLAG;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.