C++ 条件类型定义
我确信boost有一些功能可以做到这一点,但我对相关的库还不够了解。我有一个模板类,这是非常基本的,除了一个我需要定义条件类型的扭曲。这是我想要的psuedo代码C++ 条件类型定义,c++,templates,types,C++,Templates,Types,我确信boost有一些功能可以做到这一点,但我对相关的库还不够了解。我有一个模板类,这是非常基本的,除了一个我需要定义条件类型的扭曲。这是我想要的psuedo代码 struct PlaceHolder {}; template <typename T> class C{ typedef (T == PlaceHolder ? void : T) usefulType; }; struct占位符{}; 模板 C类{ typedef(T==占位符?void:T)usef
struct PlaceHolder {};
template <typename T>
class C{
typedef (T == PlaceHolder ? void : T) usefulType;
};
struct占位符{};
模板
C类{
typedef(T==占位符?void:T)usefulType;
};
如何编写该类型的条件?template
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; };
struct my_mfun:boost::mpl::if_
<
boost::是一样的吗
无效的
T
> {};
模板
结构C{typedef typename my_mfun::type usefulType;};
我认为这是您追求的原则:
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;
};
模板
结构定义类型
{
typedef T有用类型;
};
模板
结构定义类型<占位符>
{
类型定义无效有效类型;
};
模板
C类
{
typedef typename DefineMyType::usefulType usefulType;
};
新标准还包括:
typedef typename std::conditional::type usefulType
有趣。在什么情况下这会有用?你能举个例子吗?这是我的例子。对于模板参数中的一个,比如TYPE,具有值占位符意味着“关闭某些功能”。有一组回调具有返回类型*关闭该功能的自然含义是回调具有返回类型void。usefulType是回调的返回值。@pythonicaperager您能更改接受的答案吗?现在时间不同了。代码的前缀应该是4个空格。您可以选择文本并单击101010按钮进行批量编辑。谢谢,但请不要更改我的答案。请参阅常见问题解答:“如果您对其他受信任用户编辑您的问题和答案的想法不满意,这可能不适合您。”不应该,但我无法更改它。。只要用STD投票::有条件的,任何一个用户都可能足够聪明地考虑最乐观的答案。请加一个“参见RaFAK”的后续答案,或是一些东西,这样人们就可以提前查看它。