C++模板约束与奇异递归模板模式解析
1. 受限模板的最佳实践
1.1 伪概念的不足
伪概念在错误信息方面存在明显不足。C++20 编译器通常能明确指出哪个概念未满足以及原因,而模板替换错误信息则难以解读。
1.2 利用概念进行编译测试
在编写确保某些代码无法编译的测试时,可以使用概念(或伪概念)来实现。示例代码如下:
// Example 25
template <typename R>
CONCEPT SortCompilesTest(RVALUE(R, r))->decltype(sort(r));
DECLARE_CONCEPT(SortCompiles, Test);
static_assert(SortCompiles<std::vector<int>>);
static_assert(!SortCompiles<int>);
1.3 SFINAE 和概念使用的最佳实践
以下是使用 SFINAE 和概念时的一些建议,主要适用于在应用代码中使用模板的程序员:
1. 学习 SFINAE 的基本规则 :了解 SFINAE 在哪些上下文(声明)中适用,哪些(函数体)中不适用。
2. 自然使用 SFINAE :在模板声明中使用依赖于参数的类型,在尾随返回类型中使用依赖于参数的表达式,这通常是表达模板参数约束的最简单方式。
3. 审视依赖类型
超级会员免费看
订阅专栏 解锁全文
71

被折叠的 条评论
为什么被折叠?



