【发布时间】:2017-08-28 06:47:11
【问题描述】:
我在学习一些 C++ 习语时遇到了 SFINAE 的示例代码,我对代码感到困惑。
注意:is_ptr() 没有定义。
我自己编译了代码,没有关于缺少函数定义的编译器错误,为什么?
-
sizeof()用于其中一个调用,它显然是在函数返回时执行的,但话又说回来,没有定义。这怎么可能?template <typename T> struct is_pointer { template <typename U> static char is_ptr(U*); template <typename X, typename Y> static char is_ptr(X Y::*); template <typename U> static char is_ptr(U (*)()); static double is_ptr(...); static T t; enum {value = sizeof(is_ptr(t)) == sizeof(char)}; };
【问题讨论】:
-
邮政编码不是作为图像,而是作为编码格式的文本!
-
您在某处有该模板类的实例化吗?
-
我现在在移动设备上,所以无法粘贴代码。我唯一的用法是主函数中的 is_pointer
::value -
您无需定义即可知道 sizeof - 声明包含您将需要的所有数据。在您真正调用该函数之前,您根本不需要定义。
标签: c++ templates metaprogramming sfinae