7

是否有工具可以将 C++ 中的源代码转换为 C/C++ 中的源代码,但使用实例化(展开)模板?这对于明确理解 C++ 模板转换的代码是必要的。它可能存在于 IDE(MSVS、QtCreator、...)或编译器(ICC、GCC、MSVC、Clang)中?

4

2 回答 2

6

这似乎已经在 SO

Alexey Frunze 使用反汇编代码的想法/原理非常好,再加上简化模板的使用,有很好的机会准确地理解它的作用。

编辑 1 关于如何理解编译器所做的事情还有其他一些可能性

  1. 使用:gcc -S -O1 {yourcode.cpp}获取程序集并使用工具c++filt(如果您对 C-Code 感觉更舒服,它是binutils的一部分,用于将反汇编转换为 C-Code
  2. 用途:g++ -fdump-tree-original file.cpp获取一些(伪)C++ 代码
  3. 使用 MSVC++ 调试器和最后一次实例化后的断点,查看作为实例化模板参数的所有类型和值
  4. 使用:使用实例化模板生成 XML 的GCC XML常见问题解答
  5. 要了解编译器如何实例化和优化模板,您可以使用 Clang:-emit-llvm获取 LLVM IR,并使用llvm-dis将其转换为文本
  6. CPP 洞察力是一个基于 LLVM 的工具的网站,用于查看实例化
于 2013-04-05T19:04:25.937 回答
2

您可以通过在实例化或其参数中放置故意错误来解决该问题,然后您将让编译器(假设体面的版本:gcc 4.8、clang 等)输出类似以下内容的内容:“模板 XXX 实例化错误A=int, B=float, ..”。

于 2013-04-03T20:42:50.300 回答