Delegate 类模板解释文档
概述
Delegate
类模板是一个单播委托类,它封装了 C++ 的可变参数模板和 std::function
,用于存储和调用具有任意数量参数的方法,但仅支持返回值为 void
类型的方法。委托类可以看作是函数指针的一个更灵活的替代品,它允许存储和调用任何可调用的目标(如函数、lambda 表达式、函数对象等)。
头文件
1 2
| #include <functional> #include <stdexcept>
|
<functional>
: 提供了 std::function
,用于封装函数对象。
<stdexcept>
: 提供了标准异常类,如 std::runtime_error
。
类定义
成员类型别名
1
| using FunctionType = std::function<void(Args...)>;
|
FunctionType
: 类型别名,用于表示可以接受任意数量参数并返回 void
的函数类型。
构造函数
1 2 3
| Delegate(int hashCode); Delegate(); Delegate(const FunctionType& func);
|
- Delegate(int hashCode)`: 构造一个无效的委托,并设置一个哈希码。
Delegate()
: 默认构造函数,构造一个无效的委托。
Delegate(const FunctionType& func)
: 使用给定的函数对象构造一个委托,并从函数对象中获取哈希码。
成员函数
IsValid()
Invoke()
1
| void Invoke(Args... args);
|
- 调用委托绑定的函数,并传递任意数量的参数。如果委托无效,则抛出
std::runtime_error
异常。
operator==()
1
| bool operator==(Delegate& other) const;
|
operator=()
1
| Delegate& operator=(const FunctionType& func);
|
operator!=()
1
| bool operator!=(const Delegate& other) const;
|
GetHashCode()
SetHashCode()
1
| void SetHashCode(int hashCode);
|
私有成员
1 2 3
| FunctionType function; int _hashCode = 0; bool _isHandSetHashCode = false;
|
function
: 存储委托绑定的函数对象。
_hashCode
: 存储函数对象的哈希码,用于比较委托。
_isHandSetHashCode
: 标记哈希码是否已被手动设置。
注意事项
- 委托类仅支持返回值为
void
的函数。
- 在调用
Invoke
方法之前,应先检查委托是否有效。
- 哈希码用于比较委托,如果函数对象的参数类型可能发生转换,应手动设置哈希码以确保正确比较。