Условные определения типов - PullRequest
5 голосов
/ 09 июня 2010

Я уверен, что у boost есть некоторые функции для этого, но я недостаточно хорошо знаю соответствующие библиотеки. У меня есть шаблонный класс, который довольно простой, за исключением одного поворота, где мне нужно определить условный тип. Вот код psuedo для того, что я хочу

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

Как мне написать условный тип?

Ответы [ 3 ]

9 голосов
/ 11 июня 2010

Также с новым стандартом:

typedef typename std::conditional<std::is_same<T, PlaceHolder>::value, void, T>::type usefulType

6 голосов
/ 09 июня 2010

Я думаю, что вы придерживаетесь этого принципа:

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 голосов
/ 09 июня 2010
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; };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...