首页 > 解决方案 > std::conditional 中 true_type 和 false_type 的 SFINAE

问题描述

进行此编译的最佳方法是什么?

// Precondition: Dims is either a pointer or std::map.

using T = std::conditional_t<std::is_pointer_v<Dims>,
    std::remove_pointer_t<Dims>,
    typename Dims::mapped_type>;

什么时候Dims是指针,我得到:

error: template argument 3 is invalid

当条件为时,我如何使其以 SFINAE 方式工作true

标签: c++c++11templatessfinaetypetraits

解决方案


template<class T>
struct mapped_type{using type=typename T::mapped_type;};
using T = typename std::conditional_t<std::is_pointer_v<Dims>,
                         std::remove_pointer<Dims>,
                         mapped_type<Dims>>::type;

我们将“执行”推迟到条件之后。


推荐阅读