Multithreading – boost:: threads and template functions

I tried to run the template function on a separate thread, but IntelliSense (VC 2010 express) kept giving me an error:

Errors only occur after I add templates, so I'm sure it's related to them, but I don't know what it is

The two parameters I pass to boost:: thread are template functions defined as:

template<class F> 
void perform_test(int* current,int num_tests,F func,std::vector<std::pair<int,int>>* results);

And:

namespace Sort
{

template<class RandomAccessIterator>
void quick(RandomAccessIterator begin,RandomAccessIterator end);

} //namespace Sort

I tried calling boost:: thread like this:

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);

Solution

The following version compiles and runs OK for me – the main change is to modify perform_ Test declaration so that parameter 3 is correct in the context you want Also make sure there is code behind the function template

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;
};
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>