加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – boost ::线程和模板函数

发布时间:2020-12-15 08:36:05 所属栏目:Java 来源:网络整理
导读:我试图在一个单独的线程上运行模板函数但IntelliSense(VC 2010 Express)一直给我错误: “错误:没有构造函数的实例”boost :: thread :: thread“匹配参数列表” 如果我尝试编译我得到这个错误: “错误C2661:’boost :: thread :: 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);

解决方法

以下版本为我编译并运行OK – 主要更改是修改perform_test声明,以便参数3在您想要的上下文中正确.还要确保功能模板背后有代码.

typedef std::vector<std::pair<int,int>> container;

template<class F> 
void perform_test(int* current,void(* func)(typename F,typename F),container* results) 
{
    cout << "invoked thread function" << endl;
}

namespace Sort
{
    template<class RandomAccessIterator>
    void quick(RandomAccessIterator begin,RandomAccessIterator end)
    {
        cout << "invoked sort function" << endl;
    }

} //namespace Sort

int main()
{
    container quick_results;
    int current = 0,num_tests = 30;

    boost::thread test_thread(
        &perform_test<container::iterator>,Sort::quick<container::iterator>,&quick_results);    

    test_thread.join();
    return 0;
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读