用指针解释复杂的类型定义
Interpreting complex typedef with pointers
我在一个简单的C++应用程序中遇到了以下typedef
。
typedef char *(*TEXT_FUNCTION)();
我对C++相对较新,需要一些帮助来理解它的作用。在代码的后面,语句中引用TEXT_FUNCTION
TEXT_FUNCTION textfunction = reinterpret_cast<TEXT_FUNCTION>(
GetProcAddress(myDLLHandle, "getName")
);
查看 MSDN 文档以获取GetProcAddress()
,我了解到该语句返回 myDLLHandle
引用的 DLL 中getName()
函数的地址。我假设整个 cast 语句将某种指向 getName()
函数的指针分配给 textfunction
.
这准确吗?typedef
声明的每个部分是什么意思?
类型声明应按通常表达式计算的相反顺序读取。
通常对表达的评估会像
* // 4. dereference 3
(
* // 2. dereference 1
TEXT_FUNCTION // 1. read what is in TEXT_FUNCTION
)
(); // 3. call function 2
所以,类型声明
char *(*TEXT_FUNCTION)();
方法
char // 1. char
* // 2. a pointer to 1
(
* // 4. a pointer to 3
TEXT_FUNCTION // 5. TEXT_FUNCTION is 4
)
(); // 3. a function that takes 0 arguments and returns 2
因此,typedef
语句意味着将 TEXT_FUNCTION
声明为指向函数的指针,该函数接受 0 个参数并返回指向 char
的指针。
>typedef char *(*TEXT_FUNCTION)();
定义了一个名为 TEXT_FUNCTION
的函数指针类型,它不带任何参数并返回 char*
。
在通过函数getName()
的地址赋值textfunction
后,可以称为:
char* sth = textfunction();
具有相同的效果:
char* sth = getName();
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 列表参数的类型定义
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 关于 C++ 中的函数类型定义
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 将使用/类型定义限制为类范围
- 模板类型定义?
- C++:模板类的类型定义
- 如何对命名空间限定类型进行类型定义?
- 此递归模板类型定义是否有效C++?
- 具有调整对齐方式的类型定义
- C++从抽象类型定义类成员
- 用于C++代码的 API 监视器类型定义 (XML)
- 如何将result_of与函数类型定义一起使用
- 在C++的适当类型定义位置
- 如何根据模板类型定义浮点常量?
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 参数化类的别名(或类型定义)内部类
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?