<VIMacro.h> - 宏集中定义 VIMacro.h
Visindigo 项目中使用的宏的集中定义. 详情...
| 头文件: | #include <VIMacro.h> |
| 自以下版本: | Visindigo 0.13.0 |
宏
| VIAPI(name) | |
| VIAPIClass(name) | |
| VIContent | |
| VICopyable(name) | |
| VICopyable_Impl(name) | |
| VIImplClass(name) | |
| VIInterface | |
| VIMoveable(name) | |
| VIMoveable_Impl(name) | |
| VINotNull | |
| VINullable | |
| VIPath | |
| VITransferred | |
| VIUnstable | |
| VI_HAS_STD_STACKTRACE | |
| VI_Singleton(name) | |
| VI_Singleton_Definition(name) | |
| VI_Singleton_Impl(name) | |
| VI_Singleton_Init(name) | |
| VImpl(name) | |
| p_VIAPICopyable(name) |
详细说明
宏文档
VIAPI(name)
在Private类内定义API类为其友元和q指针。
name API类的名称
用于在Private类内定义API类为其友元和q指针的宏,简化代码编写。
目前为止,在Visindigo的PIMPL设计模式中,真正需要q指针的场景很少, 所以此宏也不常用到。
VIAPIClass(name)
PIMPL设计模式下的API类定义宏
name API类的名称
用于在PIMPL设计模式下定义API类的宏,简化代码编写。
此宏实际上专供Visindigo使用,因为其中含有VisindigoAPI宏
此宏会声明一个name##Private类作为私有实现类。
VIContent
标记一个QString携带内容而非路径的宏
这是个纯标记,表示一个QString携带的是内容本体,而非带有该内容的文件路径。
VICopyable(name)
在一个API类声明这个类是可复制的
name API类的名称
用于在一个API类声明这个类是可复制的宏,简化代码编写。 它会同时声明复制构造函数和复制赋值运算符函数。
VICopyable_Impl(name)
用于为API类提供”可复制“的相关实现
name API类的名称
用于为API类提供”可复制“的相关实现的宏,简化代码编写。 它会同时实现复制构造函数和复制赋值运算符函数
这要求Private类必须都是非指针成员且可复制的。 因为复制的代码为
*d = *other.d;
VIImplClass(name)
PIMPL设计模式下的私有实现类定义宏
name 私有实现类的名称
扩展到声明一个类name##Private。带有关键字class,可以直接编写类本体。
VIInterface
定义接口类
C++关键字class的别名,用于标明这是一个用作接口的纯虚类。
VIMoveable(name)
在一个API类声明这个类是可移动的
name API类的名称
用于在一个API类声明这个类是可移动的宏,简化代码编写。 它会同时声明移动构造函数和移动赋值运算符函数。
VIMoveable_Impl(name)
用于为API类提供”可移动“的相关实现
name API类的名称
用于为API类提供”可移动“的相关实现的宏,简化代码编写。
它会同时实现移动构造函数和移动赋值运算符函数
移动的代码为
d = other.d; other.d = nullptr;
VINotNull
标记指针参数不能为空的宏
这是个纯标记,标记参数时,代表该指针必须不能为空指针。
标记返回值时,代表该值一定不可能是空指针。
VINullable
标记指针参数可以为空的宏
这是个纯标记,标记参数时,代表该指针可以为空指针。 函数内部一定会检查该指针是否为空指针。
标记返回值时,代表该值可能是空指针,使用前必须检查。
VIPath
标记一个QString携带路径而非内容的宏
这是个纯标记,表示一个QString携带的是文件路径,而非该路径所指向的内容本体。
VITransferred
标记一个参数所有权会被转移的宏
这是个纯标记,标记参数时,代表该函数(或函数所在的类)会接管指针所有权, 指针在传递后不应被外部释放。
标记返回值时,代表由调用者接管指针所有权,调用者有责任释放该指针。
不用于标记指针的情况下,标记参数时,代表该函数出于某些原因会直接修改传入值的内容, 因此在传递后该值不应再被外部使用。
一般不用于标记非指针的返回值。如果出现,通常可能是用于标记一个保存了指针的容器类, 调用者有责任释放该容器类内的指针。
VIUnstable
标记一个指针为弱引用的宏
这是个纯标记,标记函数或类时,代表该函数或类处于不稳定状态,可能会在未来版本中发生重大更改或被移除。
一般不用于标记参数,但用于标记返回值,且通常标记指针类型。
当标记一个返回值指针时,代表该指针对应资源生命周期不可控,可能在任何时候被销毁, 因此这个指针应该即用即弃,不能保存以备后用。
注意,如果标记返回值,则VIUnstable在函数类型之前,如果标记函数,则VIUnstable在函数类型之后。
VI_HAS_STD_STACKTRACE
如果编译器支持 std::stacktrace,则定义此宏
如果编译器支持 std::stacktrace(C++23 标准库的一部分),则定义此宏。 目前仅在支持 C++23 标准且版本大于202011L时定义此宏。
此宏被定义后,VDebug中的宏 vgWarningF 和 vgErrorF 会自动附加堆栈跟踪信息。 Visindigo::General::Exception 类也会支持堆栈跟踪信息。
VI_Singleton(name)
用于声明一个单例类
name 单例类的名称
用于声明一个单例类的宏,简化代码编写。
它为这个单例类声明getInstance()静态函数。
VI_Singleton_Definition(name)
用于在Private类中定义API类的静态指针
name API类的名称
用于在Private类中定义API类的静态指针的宏,简化代码编写。
VI_Singleton_Impl(name)
用于实现一个单例类
name 单例类的名称
用于实现一个单例类的宏,简化代码编写。
它为这个单例类实现getInstance()静态函数。
VI_Singleton_Init(name)
用于初始化单例类的静态指针
name 单例类的名称
用于初始化单例类的静态指针的宏,简化代码编写。
VImpl(name)
PIMPL设计模式下的私有实现类定义宏
name 私有实现类的名称
用于在PIMPL设计模式下定义私有实现类的宏,简化代码编写。
此宏会声明name为友元,并定义其为d指针。
有关Visindigo中的PIMPL设计模式的更多信息,请参见PIMPL设计模式 文档。
Note: 这是Visindigvo所有宏里面为数不多的以V 开头而非VI 开头的宏,因为VI与Impl重复一个字母I。
p_VIAPICopyable(name)
在一个Private类内指定复制构造函数为编译器默认函数
name API类的名称
用于在Private类内指定复制构造函数为编译器默认函数的宏,简化代码编写。
此宏不常用到。因为纯成员变量的类的复制构造通常不需要单独声明,而带有 指针成员类的复制构造函数通常需要自定义实现。