c++模板风格,旨在更容易理解编译器错误消息

C++ template style, geared towards easier to understand compiler error messages

本文关键字:易理解 编译器 错误 消息 风格 c++      更新时间:2023-10-16

我听人说,除非预先采用一种良好的编译器错误消息友好风格,否则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页看似无关的废话]。"