c++ - 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
?
解决方案
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;
我们将“执行”推迟到条件之后。
推荐阅读
- rust - 访问 impl 模块时获取“使用未声明的类型或模块”
- firebase - 基于外键从firebase获取数据
- ios - iOS 14 UICollectionView:当部分布局从水平变为垂直时,setCollectionViewLayout 动画被破坏
- xml - 使用 Jackson XML 反序列化具有自定义条目名称的 Map
- c# - 无法连接到远程服务器(ftp 在开发中有效,但在生产中无效)
- typescript - 打字稿手册通用类型问题
- java - 从 Java 调用的 Kotlin 协程返回值 (Int)
- swift - XCTestExpectation 和 NSPredicate 的 XCTWaiter().wait 似乎失败了
- r - R: length(abs(t1)>1.97) 它返回总数
- android - 查询参数中的问题:Annotation 参数必须是编译时常量