我确信boost有一些功能可以做到这一点,但我不太了解相关的库。我有一个模板类,这是非常基本的,除了我需要定义条件类型的一个扭曲。这是我想要的伪代码
struct PlaceHolder {};
template <typename T>
class C{
typedef (T == PlaceHolder ? void : T) usefulType;
};
如何编写有条件的那种类型?
答案 0 :(得分:9)
还有新标准:
typedef typename std::conditional<std::is_same<T, PlaceHolder>::value, void, T>::type usefulType
答案 1 :(得分:6)
我认为这是你追求的原则:
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;
};
答案 2 :(得分:2)
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; };