c ++ Boost async_read_some + старые данные в буфере

Проблема в том, что для передачи второго аргумента в std::async компилятор должен превратить выражение &std::accumulate в указатель функции, но он не знает, какую специализацию шаблона функции вы хотите. Для человека очевидно, что вы хотите тот, который может быть вызван с остальными аргументами в async, но компилятор этого не знает и должен оценивать каждый аргумент отдельно.

Как PiotrS. ответ говорит, вы можете сказать компилятору, который std::accumulate вы хотите, с явным списком аргументов шаблона или с помощью приведения, или, альтернативно, вы можете просто использовать выражение лямбда вместо:

std::async(std::launch::async,[&] { return std::accumulate(v.begin(), v.end(), 0.0); });

Внутри тела lambda компилятор выполняет разрешение перегрузки для вызова std::accumulate, и поэтому он работает, какой std::accumulate использовать.

0
задан user1786639 31 December 2018 в 00:57
поделиться