小编Tyl*_*ler的帖子

将 constexpr 数组展开为位置函数参数

我习惯使用 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 宏做类似的事情。

c++ metaprogramming template-meta-programming c++20

3
推荐指数
1
解决办法
115
查看次数

有没有办法摆脱#omp 并行

我遇到了#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 之后使用,因为如果收到用户输入,接下来会发生的是两个工作线程的产生。

c++ openmp

2
推荐指数
1
解决办法
859
查看次数