Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

<VIMacro.h> - 宏集中定义 VIMacro.h

Visindigo 项目中使用的宏的集中定义. 详情...

头文件: #include <VIMacro.h>
自以下版本: Visindigo 0.13.0

详细说明

宏文档

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类内指定复制构造函数为编译器默认函数的宏,简化代码编写。

此宏不常用到。因为纯成员变量的类的复制构造通常不需要单独声明,而带有 指针成员类的复制构造函数通常需要自定义实现。