这个类有一个枚举:
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 :(得分:1)
你可以使makeThreadWorker
成为模板化函数。
template <typename T = ThreadController>
static ThreadWorker makeThreadWorker(const typename T::ThreadType & type)
{
}
如果T
不包含ThreadType
,编译器将抛出错误。可以选择添加static_assert
以限制T
到ThreadController
。
static_assert(std::is_same<ThreadController, T>::value, "error");