2010-03-20 56 views
6

有没有什么办法可以一步一步检查我们说的模板发生了什么?我的意思是如何一步一步实例化等等?调试元程序

在本书中,我已经提到过here

我发现(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; 
    }; 

,我认为它可能是能够走一步看一步这是什么模板的实例化过程中做了非常有用的。 感谢您的回复。

+0

不要接受那么快,也许别人有一个更好的提示:) – 2010-03-20 15:10:13

回答

0

我所见过的最好的是关于Templight的研究论文,但我不知道任何公开的实现。

虽然通过使用描述性静态(即编译时)断言,您可以帮助自己 - 例如,提升static assertMPLs asserts。在某些情况下,它可以帮助引发编译错误(例如,通过使用静态断言)来从编译器获取模板实例化跟踪。
此外,没有什么能够阻止您从测试的元函数结果的运行时输出。

+0

是的我认为运行时输出将适合我。谢谢 – 2010-03-20 15:09:58

+0

说了这么多,现在我遇到了一个输出问题。我试过这样的: cout << N; 但我收到错误。帮帮我。 – 2010-03-20 15:20:47

+1

你不能只在元函数中抛出输出语句,但你可以从元函数的具体实例中输出值,例如'std :: cout << binary<101> :: value'。 – 2010-03-20 15:26:57