在没有正文

时间:2017-07-14 17:50:18

标签: c++ templates static metaprogramming

template <class T, class U>
struct Conversion {
    typedef char Small;
    class Big
    {
        char dummy[2];
    };
    static Small Test(const U&);
    static Big Test(...);
    static T MakeT();
    enum { check=sizeof( Test( MakeT() ) ) == sizeof( Small ) };
};

我在互联网上看到了这个例子。它检查两个对象的转换能力。该资源解释了旧式cpp的模板技巧。我不太明白为什么在传递给Test()时调用MakeT()。最终为什么这一切都有效。关键是这些静态函数中没有实体,因此,它们什么都不返回。请帮帮我。

1 个答案:

答案 0 :(得分:4)

它并未真正调用,因为它是在sizeof内部编写的,可以应用于未评估的操作数。 sizeof正确地返回Test返回的值的大小,因为Big是完整类型,但它不关心TestMakeT是否具有正文或不