我有一个围绕win32/pthreads的C++线程包装类。问题出在我的头文件中,我需要很多biggie-include,例如windows.h和boost :: function,以便在下面声明我的typedefs。包含文件,类型定义和转发decl
有没有办法解决这个问题?我知道你可以转发声明类和结构体,但数据类型如win32 HANDLE和名称空间中的模板函数......?
#include "boost/function.hpp"
/* Thread wrapper class */
class IThread
{
public:
#if defined _WIN32 || _WIN64
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#undef WIN32_LEAN_AND_MEAN
typedef HANDLE ThreadHandle;
#else
#include <pthread.h>
typedef pthread_t ThreadHandle;
#endif
enum ThreadState
{
DETACHED = 0,
RUNNING,
FINISHED
};
typedef boost::function1<void, void*> Task;
virtual ~IThread() { }
IThread& operator=(IThread& other);
virtual int32_t Join() = 0;
virtual int32_t SetPriority(int32_t priority) = 0;
virtual ThreadHandle& GetNativeHandle() = 0;
virtual ThreadState GetThreadState() const = 0;
};
感谢
'HANDLE'只是一个'void *'。只要说'typedef void * ThreadHandle;'对于WINAPI数据类型,你可以找到我的来源[here](http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v = vs。 85)的.aspx)。 – chris
你不能在你的课堂外面移动typedef吗? – Jaywalker
他们为什么要在课外?将句柄声明为类的一部分是不是更有意义? – KaiserJohaan