我可以在前向声明的类中使用类型吗?

时间:2014-08-30 02:24:45

标签: c++

这个类有一个枚举:

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

但由于我使用的是引用,编译器是否对头文件中没有定义感到满意?

1 个答案:

答案 0 :(得分: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");