Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 条件类型定义_C++_Templates_Types - Fatal编程技术网

C++ 条件类型定义

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

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

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”的后续答案,或是一些东西,这样人们就可以提前查看它。