<Visindigo/VIMacro.h> Proxy Page
宏
| VIAPI(name) | |
| VIAPIClass(name) | |
| VICopyable(name) | |
| VICopyable_Impl(name) | |
| VIImplClass(name) | |
| VIInterface | |
| VIMoveable(name) | |
| VIMoveable_Impl(name) | |
| 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指针。
用于在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类内指定复制构造函数为编译器默认函数的宏,简化代码编写。
此宏不常用到。因为纯成员变量的类的复制构造通常不需要单独声明,而带有 指针成员类的复制构造函数通常需要自定义实现。