c++ - f(U(*)()) 只是 f(U*) 的一个特殊版本吗?
问题描述
在阅读 wiki 页面时,我发现了这个示例代码
template <class T>
struct is_pointer
{
template <class U>
static char is_ptr(U *); #1
template <class X, class Y>
static char is_ptr(Y X::*);
template <class U>
static char is_ptr(U (*)()); #2
static double is_ptr(...);
static T t;
enum { value = sizeof(is_ptr(t)) == sizeof(char) };
};
对我来说,#2 只是#1 的特殊版本,所以看起来是多余的。
我做错了什么吗?在 C++ 编译器眼中会是什么样子?
解决方案
template <class U> static char is_ptr(U *);
:is_ptr
是一个函数,它接受一个指向U
(没有名称)的指针并返回一个char
.
template <class U> static char is_ptr(U (*)());
:is_ptr
是一个采用函数指针(没有名称)的函数,它不获取参数并返回 a U
,并返回 a char
。
因此,一个得到一个指向 a 的指针,另一个得到一个U
返回 a 的函数指针U
。
推荐阅读
- docker - 导出包含使用 compose 创建的多个图像的容器
- python - 如何强制 SQLAlchemy ORM 在子查询中包含表?
- powershell - 测试免费驱动器号以映射
- performance - ElasticSearch 查询耗时过长
- javascript - 我无法访问 addEventListener 函数中的变量,并且我的全局值始终显示未定义
- php - PHPMailer从数据库发送base64图像
- java - 使用 BouncyCastle 生成 PBE-MD5-DES 加密密钥以与 OpenSSL pkcs8 兼容
- java - 在 android、firebase 中获取聊天应用程序的正确时间戳
- string - 从 PDF 中提取特定的文本字符串
- node.js - docker compose环境变量在nodejs容器中未定义