c++ - lambda 类型推导失败

标签 c++ lambda c++14

谁能解释一下为什么这段代码对模板函数不正确,但对普通函数却运行良好。例如,如果我们用非模板函数替换 std::copy,没问题。

如何更改代码并使其对模板和非模板函数都有效?

auto functionSpan = [](auto&& func, auto&&... args) {
    auto t1 = std::chrono::high_resolution_clock::now();
    std::forward<decltype(func)>(func)(std::forward<decltype(args)>(args)...);
    auto t2 = std::chrono::high_resolution_clock::now();
    return std::chrono::duration_cast<std::chrono::microseconds>(t2-t1).count();
};

vector<int> vec {1,2,3,4,5,6,7,8,9};
functionSpan(std::copy, vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));

最佳答案

std::copy 不引用单个函数。您需要指定 std::copy<Type>

关于c++ - lambda 类型推导失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348520/

相关文章:

传递 lambda 作为 std::function 的参数时,C++ 候选模板忽略错误

C++、char*、段错误

c++ - 更改函数中的指针地址?

python - Python中的函数和C++中的函数有什么区别?

c++ - 存储可变模板参数并将它们传递给 lambda

java - C++连续分数输出错误

c++ - 当未与 GCC 和 CMAKE 一起使用时如何解决 undefined reference

c++ - 为什么在 lambda 中 move 时不调用 move 构造函数?

c++ - 为什么调用 dtor(使用 annoymous/lambda func)

c++ - 如何在 lambda 捕获列表中创建指针?