2014-08-30 122 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"); 
相关问题