다른 함수가 실행되는 데 걸리는 시간을 기록하는 일반 함수를 구현하려고합니다.완벽한 전달 템플릿 함수
#include <iostream>
#include <future>
#include <thread>
#include <vector>
#include <functional>
#include <numeric>
#include <memory>
template<typename Res, typename Func, typename...Args>
std::pair<Res, double> ftime(Func fun, Args&&... args)
{
auto start = std::chrono::system_clock::now();
Res res = fun(std::forward<Args>(args)...);
std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
return std::make_pair(res, duration.count());
}
int main()
{
std::vector<int> values (100, 1);
auto res = ftime(std::accumulate, values.begin(), values.end(), 0);
std::cout << "Sum up " << values.size() << std::endl;
std::cout << "Serial sum = " << res.first << " took : " << res.second << std::endl;
}
위의 코드는 다음과 같은 오류와 함께 컴파일에 실패 :
sum_1000000.cpp: In function ‘int main()’:
sum_1000000.cpp:22:68: error: no matching function for call to ‘ftime(<unresolved overloaded function type>, std::vector<int>::iterator, std::vector<int>::iterator, int)’
auto res = ftime(std::accumulate, values.begin(), values.end(), 0);
^
sum_1000000.cpp:10:24: note: candidate: template<class Res, class Func, class ... Args> std::pair<Res, double> ftime(Func, Args&& ...)
std::pair<Res, double> ftime(Func fun, Args&&... args)
^
sum_1000000.cpp:10:24: note: template argument deduction/substitution failed:
sum_1000000.cpp:22:68: note: couldn't deduce template parameter ‘Res’
auto res = ftime(std::accumulate, values.begin(), values.end(), 0);
를 지금까지 내가 이해 한, 컴파일러는 표준 : acumulate 함수의 템플릿 유형을 indentify 수 없습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
고맙습니다.
나는 어떻게 컴파일러가 템플릿 매개 변수'Res'를 추론 할 수 있는지 보지 못했다. –