Any ideas on this one?
From:
boost-users-bounces@lists.boost.org
[mailto:boost-users-bounces@lists.boost.org] On Behalf Of Jonathan
Leonard
Sent: Thursday, April 02, 2009 2:13 PM
To: boost-users@lists.boost.org
Subject: [Boost-users] [mpl] newbie question about if_c et al
Hi,
I’m trying to make a class which is conditionally
synchronized. What I have is like the following:
template<bool
SYNCH=true>
class c
{
public:
void f()
{
typename boost::mpl::if_c<SYNCH,
ScopedCriticalSection<>,
void*>::type scs(cs); // SCS == RAII wrapper around CS
// do other stuff
}
private:
typename boost::mpl::if_c<SYNCH,
CriticalSection<>, void*>::type cs;
};
This is not entirely optimal though as it requires 3 MOV
instructions to create the scs void* copy when SYNCH is false (and I’d
rather not lean on compiler optimizations even if they will help in this
case). [Something like NullType, VoidType, or OptionType (a la F#) would
be ideal but I can’t seem to locate one (and I’m not sure the type system would
allow such a thing—it doesn’t seem to like a simple ‘void’].
Any better idiom or alternative approach anyone can offer
for this purpose would be greatly appreciated.
Many
thanks,
Jonathan