我想调试一些模板化代码以更好地理解它.
不幸的是,我是模板元编程的新手,我很难进入.
当我尝试输出预处理的源文件时,我获得了125 000行代码:/
那么我有没有办法看到生成的代码?(我正在使用的库是SeqAn)
一般来说,不可能做到这一点.模板只是C++语言的一部分,它们不是一个单独的预处理器,因此它们不生成C++代码.
通常的解决方案是使用静态断言和其他测试来填充代码,以验证正确的模板是否以正确的方式实例化.
一旦开始迷失元编程,这个简单的技巧可以帮助您确定模板参数的确实类型:
// given a variable t of an unknown type T int*** i = t;
当编译器遇到这种情况时,它会打印出一个漂亮而简单的错误消息"无法转换
为int***",允许您轻松验证模板参数T实际上是您认为它应该是的类型.
不,不是.预处理器与模板处理无关,模板处理由编译器执行.模板不会生成C++代码,只不过是函数调用 - 它们是C++语言本身不可或缺的一部分.
检查我在C++模板元程序调试上的出版物
从第6页开始,您可以看到它是如何工作的.出于特定目的,您不需要整个工具链,可以手动完成.
我已经整理了一个Visual C++插件,你可以放置断点等等,但这是一个概念证明,而不是每天使用的工具.
我们一直在研究一个图形前端,它显示了所有实例化,允许调试,分析.不幸的是,我们无法承诺该工具的任何发布日期,因为我们在非常有限的空闲时间内这样做.
更新:此处提供调试器和分析器
更新:C++现在演示
这可能是您的问题的答案:
C++模板预处理器工具
似乎已经满足了最后一个问的人 - 虽然我无法想象为什么!C语言中C++编译器的输出通常是不可读的,因为它不是为了帮助理解,而仅仅是一种可移植的汇编语言.