[C++-sig] Improved version of Lijun Qin's multithreading patch
Niall Douglas
s_sourceforge at nedprod.com
Sun Oct 26 05:29:09 CET 2003
Attached is an improved version of Lijun Qin's patched invoke.hpp for
multithreading. This version solves the following problems:
1. I couldn't find any member function traits in Boost. Odd they
should be missing, but missing they are from all copies I have.
2. Even if you /do/ have both sets of function traits, they only go
up to 10 parameters, not BPL's max arity.
3. If you had member variables eg; def_readwrite(), the old patch
failed to compile.
4. The old patch failed when the parameter types did not have a copy
constructor.
5. The old patch wrapped each call in a try...catch() which is
inefficient.
Steps taken:
1 & 2: I've added my own custom partial specialisation for functions
and member functions using the exact same preprocessor repeat as
invoke.hpp uses. Thus the full range of parameters is available.
3: I've added specialisations of detail::member and detail::datum
with type extractions.
4: I've utilised call_traits to hold converted parameters as
references where possible. As the C++ standard guarantees an object
must exist as long as a reference created initialised to it, this is
fine.
5. There's now an object which RAII.
Q: Should I make the return type also a reference? Should save a copy
construction, but I would need to take call_traits<>::param_type and
remove the const-ness.
Cheers,
Niall
More information about the Cplusplus-sig
mailing list