c++ - 在没有主体的情况下调用未实现的静态方法

标签 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()。最后为什么这一切有效。关键是这些静态函数中没有函数体,因此它们什么也不返回。请帮助我。

最佳答案

它并没有真正被调用,因为它写在 sizeof 中,可以应用于未计算的操作数。 sizeof 正确返回 Test 返回值的大小,因为 Big 是一个完整的类型,但它不关心 TestMakeT 是否有正文。

关于c++ - 在没有主体的情况下调用未实现的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45108978/

相关文章:

C++ 读/写大文件

c++ - 转换 int 并将其与 char* 连接

templates - playframework : i18n + scala

java - 如何同步对父类(super class)静态字段的访问?

c++ - 输出省略 "January"

java - SWIGTPYE_p 数据类型 Java

c++ - 从枚举类值模板参数推断枚举类类型?

java - C++模板化方法

java - 我们可以从空引用访问静态成员吗​​?如果是,为什么允许这样做?

c++ - 未定义的静态队列引用