我习惯使用 x 宏来生成强大的代码。我特别喜欢的功能之一是我不能弄乱值的顺序,也不能忘记一个。
我想知道数组和函数参数是否有类似的策略
例如:
如果一个库提供了一个函数:
void foobar(std::string_view k, std::string_view l, std::string_view m);
Run Code Online (Sandbox Code Playgroud)
在我的代码库中我有:
constexpr std::array<std::string_view, 3> kConstants{"one", "two", "three"};
Run Code Online (Sandbox Code Playgroud)
我可以做一些扩展魔法来得到类似的东西:
foobar(kConstants);
Run Code Online (Sandbox Code Playgroud)
请注意,为了这对我有用,我必须在不修改的情况下执行此操作foobar。我知道我可以用 x 宏做类似的事情。
我遇到了#pragma omp task一个#pragma omp parallel块内有两个s的情况
第一个任务是一个简单的工作,只需等待 5 秒钟。第二个任务是等待复杂的用户输入操作的更困难的工作。
bool timed_out=false;
#pragma omp parallel num_threads(2), shared(timed_out)
{
#pragma omp task
{
sleep(5);
#pragma omp atomic write
time_out=true;
}
#pragma omp task
{
// wait for user input
}
#pragma omp taskwait
}
Run Code Online (Sandbox Code Playgroud)
基本上,我希望在成功接收到用户输入或达到 5 秒超时后发生的情况,然后我想跳出该#pragma omp parallel部分并继续执行 main。
我不认为我可以#pragma omp single在 taskwait 之后使用,因为如果收到用户输入,接下来会发生的是两个工作线程的产生。