c++ - 如何扩展/"preprocess"C++模板代码

标签 c++ templates c-preprocessor

为了正确调试 C++ 中的复杂宏,我通常在它们上运行预处理器,以便准确查看生成的代码的样子。

有类似“预处理”模板代码的方法吗?

最佳答案

一种方法(依赖于编译器)是在每个编译器步骤之后使用转储。我写了一个小程序:

template<class T>
T square(T n)
{
    return n * n;
}

int main(void)
{
    square<int>(3);
    square<float>(3.0);
}

然后:

g++ -fdump-rtl-all test.cc

这给了我一堆文件。看看(在我的例子中)test.cc.218.dfinish:

;; Function int main() (main)
;; Function T square(T) [with T = int] (_Z6squareIiET_S0_)
;; Function T square(T) [with T = float] (_Z6squareIfET_S0_)

关于c++ - 如何扩展/"preprocess"C++模板代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5193867/

相关文章:

c++ - Win32 逻辑 block 预处理器显示不活动

c++ - 如何将一个 vector 传递给另一个 vector 推回? (无需创建额外的变量来传递)

c++ - 检查整数类型

javascript - AngularJS 渲染模板到变量中

c++ - 无法将字段声明为嵌套模板中的抽象类型

c++ - siginfo_t 尚未声明 : caused by inclusion of a thrift header

c++ - opencv 二进制数据 jpg 图像到 cv::Mat

c++ - 访问另一个类(系统)的非静态字段,就好像它是我自己的字段一样 - 优雅

c++ - 定义类型别名时出现语法错误

c++ - #if 0 && defined(_LP64) 如何为真?