multithreading - boost::线程和模板函数

标签 multithreading templates boost boost-thread

我试图在单独的线程上运行模板函数,但 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, &current, 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>>, 
    &current, 
    num_tests, 
    &Sort::quick<iterator>, 
    &quick_results); 

它应该可以工作。

关于multithreading - boost::线程和模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064852/

相关文章:

java - 带处理程序的顺序倒计时器将无法正确更新 textView

python - 丢失线程指针

c++ - C++模板方法中的循环依赖

c++ - union 类型的模板特化

c++ - 如何在 boost::unordered_map 中实现 TryGetValue?

ubuntu - boost/几何.hpp : No such file or directory

c++ - 线程基本..需要帮助

c# - 为什么以下 C# 多线程代码在调试器中不输出零?

c++ - 无法在初始化时转换匿名枚举

c++ - Boost::asio socket - 如何在 'throw' 中创建 read_some "timeout"?