【发布时间】:2014-12-09 13:28:32
【问题描述】:
模板本身可以是程序。
是否有模板调试器,以便您可以单步执行模板的“执行”?
这基本上必须是在编译/链接/代码生成期间完成的事情 - 并且与调试生成的程序不同。
即使在许多不能使用调试器的“原始”环境中,通常也可以进行“printf 调试”。模板也能做到吗?
edit:另一种思考方式是类似于 C 预处理器。生成“预处理”源代码(编译器实际编译的预处理器的输出)通常非常有用,这可以让您了解宏的效果。等效的模板会很棒 - 让编译器输出与模板化输入对应的非模板源代码。我想你能得到的最接近的是 C++ 到 C 的翻译器。 (comeau 编译器不这样做吗?)
【问题讨论】:
-
我无法回答“单步执行”模板编译的问题,但就“printf 样式调试”而言,您可以使用预处理器指令将自定义 cmets 或警告打印到构建输出。 stackoverflow.com/questions/3826832/…
-
不真正相关:在类型推导出来之后,您可以使用
typeid来获取它的(损坏的)名称。 -
@black 可能并不总是像 argued here 那样是个好主意
-
black:是的,我已经做到了。不同的编译器也有不同的方式来提供 de-mangled 名称。 (关于 C++ 标准的普遍抱怨:该标准几乎没有考虑到可调试性 - 例如,应该有一个标准定义的方法来获取解构名称)。这种技术和其他技术要求您编辑源代码,猜测编译期间发生的事情,以便正确选择在何处插入错误或 typeid() 内容。
标签: c++ template-meta-programming