由于API在hpx和#include<thread>之间非常相似,所以有可能有相同的代码来运行hpx或#include<thread>吗?
由于boost是hpx的一个要求,我的用例是有些系统是不允许boost的,有些是这样的,我希望在这两种系统上运行相同的代码,但如果可能的话使用hpx。
假设我只使用hpx和线程中的特性,有这样做的例子吗?我能不能通过#ifdef
发布于 2016-08-26 15:32:28
如果两个库的API完全相同,则可以使用有条件编译的类型别名:
#if defined(USE_HPX_THREADS)
#include <hpx/thread.hpp>
namespace my_library
{
using my_thread = hpx::thread;
}
#elif defined(USE_STD_THREADS)
#include <thread>
namespace my_library
{
using my_thread = std::thread;
}
#endif或者,如果API不同,您可以创建自己的同构接口,根据预处理器定义使用不同的实现:
class my_thread
{
private:
// "Conditional type alias" like the example above.
my_thread_handle _thread;
public:
void join();
};
#if defined(USE_HPX_THREADS)
void my_thread::join()
{
_thread.hpx_join();
}
#elif defined(USE_STD_THREADS)
void my_thread::join()
{
_thread.std_join();
}
#endif将实现分离到不同的文件中可能是个好主意。查看库,如SFML 一个真实世界的例子 (Unix和Win32文件夹)。
发布于 2016-08-26 17:50:17
std::thread和hpx::thread的API是完全相同的,因此Vittorio描述的using技巧就能做到这一点。
https://stackoverflow.com/questions/39169532
复制相似问题