boost::function & Copying efficiency
Hi,
I'm looking for a way to let the function object wrapper be stored by reference
instead of by cloning/copying.
It's said in [1] that someone can achieve this through the use of references,
but i don't know how to apply it in this particular case.
<code>
class A {
bool operator()(void) {return false;}
};
typedef boost::function
On Tue, 18 Sep 2007, Michael Bradley Jr wrote:
Hi,
I'm looking for a way to let the function object wrapper be stored by reference instead of by cloning/copying. It's said in [1] that someone can achieve this through the use of references, but i don't know how to apply it in this particular case.
<code> class A { bool operator()(void) {return false;} };
typedef boost::function
TEST; class B { void invoke(TEST obj); };
When i pass an instance of A as a parameter to the invoke method of B then the whole object is copied. I just want it to be use
</code>
I've also use boost::ref without success
class C { void invoke(TEST & obj); }; doesn't work either!
boost::ref works. You can use it with your class B like this: B b ; A a ; b.invoke( ::boost::ref( a ) ) ; or TEST obj = ::boost::ref( a ) ; b.invoke( obj ) ; It won't work for C because you will be initializing a non-const reference from a temporary object. But for the latter use above, you might want to do this: class C { void invoke(const TEST& obj); }; and then c.invoke( obj ) ; it will save you a copy of the wrapper obj. -- François Duranleau LIGUM, Université de Montréal "When there are others, I can perceive myself as an individual. If I am alone, then I will be the same as everything else. There will be no difference between myself and nothing!" - from _Neon Genesis Evangelion_
participants (2)
-
François Duranleau
-
Michael Bradley Jr