版本信息:我使用的是boost 1.64和Visual Studio 2015
我很难理解这个提升编译错误。
我的示例代码是:
#include <iostream>
#include <boost\thread.hpp>
using namespace std;
void testfunc(vector<int> &first, vector<string> &second)
{
first.push_back(42);
cout << "I live." << endl;
}
int main()
{
vector<int> first;
vector<string> second;
unique_ptr<boost::thread> thr = make_unique<boost::thread>(new boost::thread(testfunc, boost::ref(first), boost::ref(second)));
return 0;
}
编译失败,错误为:boost\thread\detail\thread.hpp(116): error C2064: term does not evaluate to a function taking 0 arguments
为什么要尝试将其编译为带0参数的函数?不应该传递给boost::thread
构造函数的两个额外参数告诉提升参数testfunc
需要多少?
问题似乎不是boost::thread
构造函数,而是包装指针的unique_ptr
。没有它,代码编译。
至于为什么会这样,我仍然没有线索。
答案 0 :(得分:3)
这与Boost,矢量,字符串或线程无关。
您在这里使用make_unique<T>
错误:
make_unique<boost::thread>(new boost::thread(testfunc, boost::ref(first), boost::ref(second)));
// ^^^^^^^^^^^^^^^^^^
构造T
需要参数,但是你将原始指针传递给已经构造的对象。 boost::thread
不知道如何处理boost::thread*
。
你应该简单地写一下:
make_unique<boost::thread>(testfunc, boost::ref(first), boost::ref(second));