首页 > 解决方案 > std::enable_if ... else aka typename_if_else

问题描述

类似于std::enable_if我想要一个else类型信息(我需要这个用于依赖可变参数模板static_cast)。我从标准扩展了可能的实现,如下所示:

template<bool B, class T = void, class F = void>
struct typename_if_else
{};

template<class T, class F>
struct typename_if_else<true, T, F>
{
    typedef T type;
};

template<class T, class F>
struct typename_if_else<false, T, F>
{
    typedef F type;
};

template< bool B, class T = void >
using typename_if_else_t = typename typename_if_else<B,T>::type;

有没有办法摆脱不再需要的空结构(第一个定义)?

标签: c++templatestypetraitsenable-if

解决方案


您可以为 , 创建部分模板特化false,并true设为默认值。

template<bool B, class T = void, class F = void>
struct typename_if_else
{
typedef T type;
};

template<class T, class F>
struct typename_if_else<false, T, F>
{
    typedef F type;
};

template< bool B, class T = void >
using typename_if_else_t = typename typename_if_else<B,T>::type;

推荐阅读