gpt4 book ai didi

c++ - include files, typedefs 和 forward decl

转载 作者:行者123 更新时间:2023-11-28 07:58:07 25 4
gpt4 key购买 nike

我有一个围绕 win32/pthreads 的 C++ 线程包装器类。问题出在我的标题中,我需要很多重要的东西,例如 windows.h 和 boost::function,以便在下面声明我的 typedef。

有什么办法解决这个问题吗?我知道您可以转发声明类和结构,但是像 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;

};

谢谢

最佳答案

我假设这不是您的真实代码,因为我看不到 include 如何在您的类定义中间工作。

在这种情况下,您可能根本不想公开 native 线程标识符。相反,提供抽象功能以理智的方式作用于线程,并且在任何时候都不要公开实现细节,例如 HANDLE .然后您可以将包含移动到您的源文件并避免问题。

另请注意执行 WIN32_LEAN_AND_MEAN + #include <Windows.h>在头文件中意味着不想要 WIN32_LEAN_AND_MEAN 的人但在他们自己的 windows.h 之前包含您的标题include 会出乎意料地得到精益求精。

编辑:我认为可以使用 boost::function在 header 中,因为无论环境如何,包含始终相同。只要您始终将其公开为 Task而不是 function它本身可以被认为是界面的一部分。

关于c++ - include files, typedefs 和 forward decl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12218429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com