私は、何の問題、+が実行次のプログラムをコンパイルしていないテンプレートできませんでした<typename>ポインタタイプを推測しますか?
#include <thread>
#include <future>
#include <iostream>
#include <algorithm>
void f(int* first,
int* last,
std::promise<int> accumulate_promise)
{
int sum = std::accumulate(first, last, 0);
accumulate_promise.set_value(sum); // Notify future
}
int main()
{
int numbers[] = { 1, 2, 3, 4, 5, 6 };
std::promise<int> accumulate_promise;
std::future<int> accumulate_future = accumulate_promise.get_future();
std::thread work_thread(f, begin(numbers), end(numbers),
std::move(accumulate_promise));
accumulate_future.wait(); // wait for result
std::cout << "result=" << accumulate_future.get() << '\n';
work_thread.join(); // wait for thread completion
}
しかし、私はテンプレートに "F" を変更した場合:
template<typename Iterator>
void f(Iterator first,
Iterator last,
std::promise<int> accumulate_promise)
{
int sum = std::accumulate(first, last, 0);
accumulate_promise.set_value(sum); // Notify future
}
そして、それは、コンパイル、gccのレポートを失敗し、そのスレッド::スレッド()ctorのは、適切な過負荷を見つけることができません: エラー:への呼び出しに該当する関数 'のstd ::スレッド::スレッド(、int型*、int型*、のstd :: remove_reference &> ::タイプ)'
何そのメッセージは、anytテンプレートにヒンジが間違っていますか? 修正方法?
ありがとうございました。