有模板调试器吗?

joe*_*ing 11 c++ template-meta-programming

模板本身可以是程序.

是否有模板调试器,以便您可以逐步执行模板的"执行"?

这基本上必须是在compile/link/codegen期间完成的事情 - 并且不同于调试生成的程序.

即使在许多不能使用调试器的"原始"环境中,通常也可以进行"printf调试".甚至可以使用模板吗?

编辑:另一种思考方式就像C预处理器.生成"预处理"源代码(编译器实际编译的预处理器输出)通常非常有用 - 这可以让您了解宏的效果.等效的模板会很棒 - 让编译器输出非模板源代码,该源代码与模板化输入相对应.我认为最接近的是C++到C的翻译器.(那个comeau编译器不这样做吗?)

Kho*_*ano 4

您可能想查看此补丁以获取输出模板实例化的 clang。

另一个简单的工具是编译器在尝试实例化未定义模板时生成的错误消息。

template< typename > struct TD;

template< typename T >
void your_template_function( T & param )
{
    // Both of these produce an error about "undefined type TD< T > with T = ..."
    TD< T > test1;
    TD< decltype( param ) > test2;
}
Run Code Online (Sandbox Code Playgroud)

斯科特·迈耶斯 (Scott Meyers) 在环尾狐猴滑梯之后的CPPCon 演讲中对此进行了解释。