2014-08-30 115 views
1

這個類有一個enum:我可以在預先聲明的類中使用類型嗎?

class ThreadController 
{ 
public: 
    enum ThreadType { ... } 
} 

是否有可能使用ThreadType &從向前聲明的類?

class ThreadController; 

class ThreadWorker 
{ 
public: 
    static ThreadWorker makeThreadWorker(const ThreadController::ThreadType & type); 
} 

我得到以下錯誤:

'ThreadType' in 'class ThreadController' does not name a type 

但自從我使用一個參考,不能在編譯器很樂意與沒有在頭文件中定義?

+0

編譯器不知道什麼'ThreadController'包含在那一點上。 – chris 2014-08-30 02:26:30

+0

你如何告訴編譯器? 'typename'的很好用法? – 2014-08-30 02:27:36

+0

[C++中的嵌套類型/類的前向聲明]的可能重複(http://stackoverflow.com/questions/951234/forward-declaration-of-nested-types-classes-in-c) – ikh 2014-08-30 02:30:30

回答

1

您可以使makeThreadWorker爲模板化函數。

template <typename T = ThreadController> 
static ThreadWorker makeThreadWorker(const typename T::ThreadType & type) 
{ 

} 

編譯器將拋出一個錯誤,如果T不包含ThreadType。只能添加static_assert以限制TThreadController

static_assert(std::is_same<ThreadController, T>::value, "error"); 
相關問題