调试元程序

The*_* do 6 c++ debugging metaprogramming

有没有办法逐步检查让我们说模板发生了什么?我的意思是如何逐步实例化等等?

我在这里提到过的书,

我发现(2分钟前)非常有趣的例子,说明如何将二进制文件实现为元函数.

template <unsigned long N>
   struct binary
   {
       static unsigned const value
          = binary<N/10>::value << 1   // prepend higher bits
            | N%10;                    // to lowest bit
   };

   template <>                           // specialization
   struct binary<0>                      // terminates recursion
   {
       static unsigned const value = 0;
   };
Run Code Online (Sandbox Code Playgroud)

我认为能够逐步查看在此模板实例化过程中所做的事情可能非常有用.谢谢你的回复.

Geo*_*che 0

到目前为止我见过的最好的论文是关于Templight 的研究论文,但我不知道有任何公开的实现。

不过,通过使用描述性静态(即编译时)断言,您可以对自己有很大帮助 - 请参阅例如 Boosts static assertsMPLsasserts。在某些情况下,它可以帮助引发编译错误(例如通过使用静态断言)以从编译器获取模板实例化跟踪。
此外,没有什么可以阻止您在运行时输出元函数结果以进行测试。