Wil*_*oat 16 c++ algorithm multithreading c++17
我正在阅读cppreference.com上的std :: algorithm文档,我注意到很多很酷的东西上我还没有使用C++ 17标签.我最关注的是新的执行政策.我从阅读中得到的是,我可以通过指定执行策略来创建任何我想要多线程的循环.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;
}
Run Code Online (Sandbox Code Playgroud)
如果我想让这个程序多线程,我应该能够用一行来完成.
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;
}
Run Code Online (Sandbox Code Playgroud)
然而,当我第一次尝试这个(有g++ -std=c++17)时,我得到一个错误告诉我‘std::execution’ has not been declared,所以我尝试添加,#include <execution>但它说execution: No such file or directory.我也试过#include<experimental/algorithm>而不是,#include<algorithm>但我得到了相同的结果.我如何使用这个新功能?
Yak*_*ont 12
c ++ 17尚未最终确定.各种编译器还没有完全实现它.
-std=c++17 意思是"给你我完成的所有C++ 17",而不是"是一个完全有效的C++ 17编译器".
此时,编译器和/或标准库不支持此功能.几周/几个月/年后回来查看.
没有普遍接受的"请给我C++ 17如果你完全支持它,否则给我一个错误"标志你可以传递给编译器; 部分原因是它几乎没有实际用途.如果他们提供的C++ 17子集足够,那么你就赢了.如果你需要一个完全兼容的编译器,特定版本的编译器不知道它们是否有bug,所以无论如何你都不能信任该标志,并且必须针对编译器版本进行测试.如果您已经知道哪些版本的编译器具有足够有效的C++ 17,那么您不需要标记来告诉您.
| 归档时间: |
|
| 查看次数: |
9389 次 |
| 最近记录: |