Multithreading – boost:: threads and template functions
•
Java
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,¤t,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
二维码
