Le 20/03/13 13:26, Vicente J. Botet Escriba a écrit :
Le 20/03/13 00:22, Alexander Lamaison a écrit :
"Vicente J. Botet Escriba"
writes: Le 19/03/13 20:30, Alexander Lamaison a écrit :
"Vicente J. Botet Escriba"
writes: Le 19/03/13 19:40, Alexander Lamaison a écrit :
I'm trying to create a move-only object asyncronously using Boost.Thread unique_future but I'm running into trouble:
error C2248: 'A::A' : cannot access private member declared in class 'A' c:\users\awl03\documents\visual studio 2005\projects\boost_1_51_0\boost\thread\future.hpp 493
I've tried all sorts of ways to work around this but always end up with some variation or other of this error message. What am I doing wrong?
snip
you need to use version 4 to got this functionality. I assume this requires Boost 1.53?
I have modified your example to use boost::future (*) and use packaged_task with a signature parameter (**). With this change it to works for the following toolsets. Thanks! Can you give me an idea of what changed in v4 to enable this? I've looked through the history but nothing stands out.
I tried to make it work using just class thread rather than anything in
, but I couldn't work out how for a non-default constructible class. I have just tried your example defining
#define BOOST_THREAD_USES_MOVE
and it works also. Perfect. Thanks :)
I'm assuming this solves the problem because the previous thread-internal move emulation didn't realise class A was movable and so tried to copy it. Is that right?
Yes, your code declared a move only class using the Boost.Move emulation. Boost.Thread has defined equivalent macros that use both emulations. Could you try with the following without defining BOOST_THREAD_USES_MOVE
//#define BOOST_THREAD_USES_MOVE
class A : public noncopyable { BOOST_THREAD_MOVABLE_ONLY(A)
public: A(int ) {}
A(BOOST_THREAD_RV_REF(A) ) {}
A& operator=(BOOST_THREAD_RV_REF(A) ) { return *this;}
};
Ah, you will need to add BOOST_THREAD_DCL_MOVABLE_BEG(T) A BOOST_THREAD_DCL_MOVABLE_END so that there is no conflict with Boost.Move. HTH, Vicente