我试图在单独的线程上运行模板函数,但 IntelliSense (VC++ 2010 Express) 不断给我错误: “错误:构造函数“boost::thread::thread”的实例没有与参数列表匹配” 如果我尝试编译,我会收到此错误: “错误 C2661:'boost::thread::thread':没有重载函数需要 5 个参数”
该错误仅在我添加模板后发生,因此我确定它与它们有关,但我不知道是什么。
我传递给 boost::thread 的两个参数是定义为的模板函数:
template<class F>
void perform_test(int* current, int num_tests, F func, std::vector<std::pair<int, int>>* results);
和:
namespace Sort
{
template<class RandomAccessIterator>
void quick(RandomAccessIterator begin, RandomAccessIterator end);
} //namespace Sort
我尝试像这样调用 boost::thread :
std::vector<std::pair<int, int>> quick_results;
int current = 0, num_tests = 30;
boost::thread test_thread(perform_test, ¤t, num_tests, Sort::quick, &quick_results);
最佳答案
模板函数不是“真正的”函数。编译器首先需要实例化它。但为了让编译器执行此操作,它需要知道您希望实例化函数的模板参数的类型。编译器无法从代码中推断出这些参数。
但是,如果您将代码重写为:
typedef std::vector<std::pair<int, int>> container;
typedef container::iterator iterator;
boost::thread test_thread(
&perform_test<Sort::quick<iterator>>,
¤t,
num_tests,
&Sort::quick<iterator>,
&quick_results);
它应该可以工作。
关于multithreading - boost::线程和模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064852/