c – 为什么我不能使用auto和std :: thread?

前端之家收集整理的这篇文章主要介绍了c – 为什么我不能使用auto和std :: thread?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到了std :: thread的问题,因为它不接受采用自动指定参数的函数.以下是一些示例代码
#include <iostream>
#include <vector>
#include <thread>

using namespace std;

void seev(const auto &v) // works fine with const vector<int> &v
{
    for (auto x : v)
        cout << x << ' ';
    cout << "\n\n";
}

int main()
{
    vector<int> v1 { 1,2,3,4,5 };
    thread t(seev,v1);
    t.join();
    return 0;
}

但是编译器说:

[Error] no matching function for call to 'std::thread::thread(<unresolved overloaded function type>,std::vector<int>&)'

为什么会这样?这是语言或GCC(4.9.2)的问题吗?

解决方法

将auto视为模板参数,然后您的函数如下所示:
template <class T>
void seev (const T &v) ...

如果没有明确的类型规范,C就无法生成模板.这就是你得到错误的原因.要解决问题(使用模板参数声明),您可以使用:

thread t (seev<decltype(v1)>,std::ref(v1));

猜你在找的C&C++相关文章