Условные определения типа

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

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

Как я пишу то условное выражение типа?

5
задан pythonic metaphor 9 June 2010 в 17:51
поделиться

3 ответа

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

typedef typename std :: conditional :: value, void, T> :: typefulType

9
ответ дан 18 December 2019 в 09:47
поделиться

Думаю, вы следуете принципу:

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;
};
6
ответ дан 18 December 2019 в 09:47
поделиться
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; };
2
ответ дан 18 December 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: