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

<Visindigo/VIMacro.h> Proxy Page

宏文档

VIAPI(name)

在Private类内定义API类为其友元和q指针。

用于在Private类内定义API类为其友元和q指针的宏,简化代码编写。

目前为止,在Visindigo的PIMPL设计模式中,真正需要q指针的场景很少, 所以此宏也不常用到。

VIAPIClass(name)

PIMPL设计模式下的API类定义宏

用于在PIMPL设计模式下定义API类的宏,简化代码编写。

此宏实际上专供Visindigo使用,因为其中含有VisindigoAPI宏

此宏会声明一个name##Private类作为私有实现类。

VICopyable(name)

在一个API类声明这个类是可复制的

用于在一个API类声明这个类是可复制的宏,简化代码编写。 它会同时声明复制构造函数和复制赋值运算符函数。

VICopyable_Impl(name)

用于为API类提供”可复制“的相关实现

用于为API类提供”可复制“的相关实现的宏,简化代码编写。 它会同时实现复制构造函数和复制赋值运算符函数

这要求Private类必须都是非指针成员且可复制的。 因为复制的代码为

*d = *other.d;

VIImplClass(name)

PIMPL设计模式下的私有实现类定义宏

扩展到声明一个类name##Private。带有关键字class,可以直接编写类本体。

VIInterface

定义接口类

C++关键字class的别名,用于标明这是一个用作接口的纯虚类。

VIMoveable(name)

在一个API类声明这个类是可移动的

用于在一个API类声明这个类是可移动的宏,简化代码编写。 它会同时声明移动构造函数和移动赋值运算符函数。

VIMoveable_Impl(name)

用于为API类提供”可移动“的相关实现

用于为API类提供”可移动“的相关实现的宏,简化代码编写。

它会同时实现移动构造函数和移动赋值运算符函数

移动的代码为

d = other.d;
other.d = nullptr;

VI_HAS_STD_STACKTRACE

如果编译器支持 std::stacktrace,则定义此宏

如果编译器支持 std::stacktrace(C++23 标准库的一部分),则定义此宏。 目前仅在支持 C++23 标准且版本大于202011L时定义此宏。

此宏被定义后,VDebug中的宏 vgWarningF 和 vgErrorF 会自动附加堆栈跟踪信息。 Visindigo::General::Exception 类也会支持堆栈跟踪信息。

VI_Singleton(name)

用于声明一个单例类

用于声明一个单例类的宏,简化代码编写。

它为这个单例类声明getInstance()静态函数。

VI_Singleton_Definition(name)

用于在Private类中定义API类的静态指针

用于在Private类中定义API类的静态指针的宏,简化代码编写。

VI_Singleton_Impl(name)

用于实现一个单例类

用于实现一个单例类的宏,简化代码编写。

它为这个单例类实现getInstance()静态函数。

VI_Singleton_Init(name)

用于初始化单例类的静态指针

用于初始化单例类的静态指针的宏,简化代码编写。

VImpl(name)

PIMPL设计模式下的私有实现类定义宏

用于在PIMPL设计模式下定义私有实现类的宏,简化代码编写。

此宏会声明name为友元,并定义其为d指针。

有关Visindigo中的PIMPL设计模式的更多信息,请参见PIMPL设计模式 文档。

Note: 这是Visindigvo所有宏里面为数不多的以V 开头而非VI 开头的宏,因为VI与Impl重复一个字母I。

p_VIAPICopyable(name)

在一个Private类内指定复制构造函数为编译器默认函数

用于在Private类内指定复制构造函数为编译器默认函数的宏,简化代码编写。

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