problem with library design: support both std::ptr_fun and functor
Hello, I have a situation where I need to design a library for
multi-thread application, each thread does some work in a client
supplied std::ptr_fun(free_function) or a functor.
Now since it's a multi-threaded application, naturally I want the call
back functor to be created on a per thread basis.
Suppose my thread is so defined
template <typename servlet_type>
struct worker_thread{
void operator()(){
serverlet_type()(int x);
}
};
Now I find it a problem to actually pass a free function to the worker
thread.
void serv(int x){
}
typedef
std::pointer_to_unary_function<int, void> serverlet_type;
worker_thread<serverlet_type> thr;
Now, thr does not actually know that I want to use serv to perform per
thread work.
I can pass the free function ptr all the way to worker_thread
constructor but this design conflicts with a functor callback. If a
functor object is passed all the way to worker_thread, the library is
not thread safe.
I am using boost::thread to build this library. But that should be
irrelevant. My problem is that when using a container with
free_function/functor, I run into this problem. I checked STL
implementation of various algorithms, they are all stateless free
functions which made it possible to accept both std::ptr_fun or a user
defined functor.
Any suggestion on this issue? Thank you very much.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]