Я уверен, что повышение имеет некоторые функции для того, чтобы сделать это, но я не знаю соответствующие библиотеки достаточно хорошо. У меня есть шаблонный класс, который является довольно основным, за исключением одного скручивания, где я должен определить условный тип. Вот код psuedo для того, что я хочу
struct PlaceHolder {};
template <typename T>
class C{
typedef (T == PlaceHolder ? void : T) usefulType;
};
Как я пишу то условное выражение типа?
Также с новым стандартом:
typedef typename std :: conditional
Думаю, вы следуете принципу:
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; };