c++模板风格,旨在更容易理解编译器错误消息
C++ template style, geared towards easier to understand compiler error messages
我听人说,除非预先采用一种良好的编译器错误消息友好风格,否则c++模板会使开发和维护项目变得极其困难。
我希望有一个资源的指针来描述这种风格,并解释它。
虽然我寻求具体的指示,但这个问题可以被解释为开放式的,在这种情况下,我愿意接受关于如何最好地提出它的建议,或者完全从SO中删除它,或者使其成为wiki
andrei alexandrescu的书,现代c++设计,可能是你正在寻找的。
当类型不兼容错误发生在一系列模板的深处时,模板错误消息往往会变得难以处理。可以这样编写代码,即使用类型安全检查技术(如std::enable_if
)在早期检测模板错误,以确保用于实例化类或函数模板的类型预先满足某些要求。事实上,这是c++ 11 concepts
的目标,但从未实现。
你可以用编码风格做的主要事情是使用像static_assert
这样的东西来检查模板参数,然后再尝试使用它们。[注:虽然enable_if也很有用,但我认为static_assert通常更适合这类任务。]
这有助于至少提供一些(例如)错误消息的机会,例如"错误:X必须是整数类型",而不是像:"错误:不能实例化_Detail::_Some_internal_type<double>
",或者(总是喜欢的)没有_Foo的重载接受ZZZ类型的形参,或者没有适当的转换。候选人是:[插入5页看似无关的废话]。"
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- 如何理解C++标准N3337中的expr.const.cast子句8
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 理解c++中的引用
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 是否允许编译器优化掉局部易失性变量
- 对从引用到 std::reference_wrapper 或编译器错误的隐式转换的理解不正确?
- 编译器如何理解指针和数组的声明
- 无法理解编译器在复制构造函数上引发的错误消息
- 理解运算符查找;哪个编译器是正确的
- 我从未见过的编译器错误有人可以帮助我理解它吗?
- c++编译器能否消除未读的易失性局部变量?
- c++模板风格,旨在更容易理解编译器错误消息