
Hi folks, I'm currently attempting to create a little facility that will allow me to eaily kick off a function call in another thread and get the result through a "future". Something like: unsigned count_primes_upto(std::size_t max); async::layered_cage < std::exception, std::domain_error, async::catch_all
cage; // to catch exceptions // call count_primes_upto(9876543210) in another thread async::future<unsigned> n = async::call(cage, &count_primes_upto, 9876543210); // do other stuff in the mean time // ... // Block until done. Get result or propagate exception std::cout << "there are " << n.value() << " primes less than " << 9876543210 <<'\n'; To achieve this I'm using boost::bind and boost::function quite heavily. I've discovered that by the time the final boost::function<void ()> is composed for the boost::thread constructor, I've copied each of the arguments (such as 9876543210 in the above) about 30 times!. Now, I can use boost::ref() internally in such a way that no copying of arguments happens at all. However, this is also undesirable; I would like the thread that is created to have its own copy of each argument unless the client explicitly wraps an argument in boost::ref/cref in order to avoid dangling cross-thread references. So what I'd like is a way to copy the result of my final boost::bind() call in to a new functor where all the ref() arguments are deep-copied once and only once at the end. Is there some way of doing this? Perhaps the "as yet undocumented" visit_each is relevant, here? Kind regards, Edd