簡體   English   中英

C ++-使用沒有模板參數的模板類中的枚舉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM