gpt4 book ai didi

c++ - 如何使用新的 C++17 执行策略?

转载 作者:IT老高 更新时间:2023-10-28 22:21:21 27 4
gpt4 key购买 nike

我正在阅读 std::algorithm文档位于 cppreference.com我注意到很多我还没有使用过的很酷的东西上有一个 C++17 标签。最引起我注意的是the new execution policies.我从阅读中收集到的信息是,我可以制作任何 for_each循环我想要多线程,只需指定执行策略即可。

例如,我有一个程序可以输出带有 2D 图形的图像。

int main(){
std::for_each(
img.buffer().begin(),
img.buffer().end(),
renderer(
{-0.5, 0.0, 2.666, 2.0, M_PI / 2.0, 0.0},
img,
16
)
);
fout << img;
}

如果我想让这个程序多线程,我应该可以用一行来完成。

int main(){
std::for_each(
std::execution::par_unseq, // c++17 feature
img.buffer().begin(),
img.buffer().end(),
renderer(
{-0.5, 0.0, 2.666, 2.0, M_PI / 2.0, 0.0},
img,
16
)
);
fout << img;
}

但是,当我第一次尝试这个(使用 g++ -std=c++17 )时,我收到一个错误,告诉我 ‘std::execution’ has not been declared ,所以我尝试添加 #include <execution>但它说execution: No such file or directory .我也试过#include<experimental/algorithm>而不是 #include<algorithm>但我得到了同样的结果。如何使用此新功能?

最佳答案

尚未最终确定。而且各种编译器还没有完全实现。

-std=c++17 的意思是“给我你已经完成的所有 C++17”,而不是“成为一个完全有效的 C++17 编译器”。

此时您的编译器和/或标准库不支持此功能。几周/几个月/几年后再回来查看。

没有普遍接受的“如果你完全支持,请给我 C++17,否则给我一个错误”标志,你可以传递给编译器;部分原因是它几乎没有实际用途。如果他们提供的 C++17 子集足够,那么你就赢了。如果您需要一个完全兼容的编译器,特定版本的编译器不知道它们是否有错误,因此您无论如何都不能信任该标志,并且必须针对编译器版本对其进行测试。而且,如果您已经知道哪些版本的编译器具有足够有效的 C++17,则不需要标志来告诉您。

关于c++ - 如何使用新的 C++17 执行策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42567998/

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