I'm sure that boost has some functions for doing this, but I don't know the relevant libraries well enough. I have a template class, which is pretty basic, except for one twist where I need to define a conditional type. Here is the psuedo code for what I want
struct PlaceHolder {};
template <typename T>
class C{
typedef (T == PlaceHolder ? void : T) usefulType;
};
How do I write that type conditional?
Also with the new standard:
typedef typename std::conditional<std::is_same<T, PlaceHolder>::value, void, T>::type usefulType
I think this is the principle you're after:
template< class T >
struct DefineMyTpe
{
typedef T usefulType;
};
template<>
struct DefineMyType< PlaceHolder >
{
typedef void usefulType;
};
template< class T >
class C
{
typedef typename DefineMyType< T >::usefulType usefulType;
};
template < typename T >
struct my_mfun : boost::mpl::if_
<
boost::is_same<T,PlaceHolder>
, void
, T
> {};
template < typename T >
struct C { typedef typename my_mfun<T>::type usefulType; };
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With