条件类型定义

时间:2010-06-09 17:51:05

标签: c++ templates types

我确信boost有一些功能可以做到这一点,但我不太了解相关的库。我有一个模板类,这是非常基本的,除了我需要定义条件类型的一个扭曲。这是我想要的伪代码

struct PlaceHolder {};
    template <typename T>
class C{
    typedef (T == PlaceHolder ? void : T) usefulType;
};

如何编写有条件的那种类型?

3 个答案:

答案 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; };