Я читал документацию std::algorithm по адресу cppreference.com и я заметил тег 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;
}
Если я хочу сделать эту программу многопоточной, я смогу сделать это одной строкой.
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>
, но результат тот же. Как использовать эту новую функцию?