是否有可能编写可以在HPX和c++ 1x线程之间切换的代码?



由于API在hpx#include<thread>之间相当相似,是否有可能具有相同的代码能够运行hpx#include<thread> ?

由于boost是hpx的要求,我在这里的用例是,有些系统不允许boost,有些系统允许,我希望相同的代码在两者上运行,但如果可能的话,使用hpx

假设我只使用在hpx和线程的功能,有这样做的例子吗?我甚至可以通过#ifdef吗?

如果两个库的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文件夹)

std::threadhpx::thread的api是完全相同的,因此Vittorio描述的using技巧将会奏效。

相关内容

  • 没有找到相关文章

最新更新