ToB企服应用市场:ToB评测及商务社交产业平台
标题:
泛形variant+visit
[打印本页]
作者:
道家人
时间:
2024-5-15 19:57
标题:
泛形variant+visit
泛形variant+visit
1.引言
在python里可以让一个变量变成不同的范例,拥有不同的值,且根据不同的范例执行不同的利用,当不同的范例拥有同样的函数时,如许我们就不用再重复写一堆代码了
但如果在c++中实现类似的功能,比较经典的处理方式是用虚函数 + 子类重写的方式,
class Base{
virtual void accept(visitor) = 0;
}
class sub1:Base{
void accept(visitor){
visitor->visit(this)
}
}
class sub2:Base{
void accept(visitor){
visitor->visit(this)
}
复制代码
如许的话代码的冗余度就高了,且每次添加新都需要新建一个类
有没有更简单一些的方式呢,接下来的variant+visit能够很好的解决该问题
2. variant
std::variant 是 C++17 标准中引入的一种数据范例,它允许在一个变量中存储多种不同范例的值,这些值被称为“备选项”或“可更换项”。std::variant 本质上是一种范例安全的联合(Union)范例
2.1 特点
范例安全
:std::variant 确保在编译时检查范例,因此可以避免运行时的范例错误。
多态值
:std::variant 可以存储不同的数据范例,这使得它非常机动,可以在一种范例安全的情况下处理多态值。
访问备选项
:使用 std::get() 或 std::get_if() 可以访问 std::variant 中存储的备选项。此外,std::visit() 函数提供了一种通用的方式来访问 std::variant 中的值,类似于多态行为。
异常安全
:与使用裸指针和范例转换相比,std::variant 提供了更好的异常安全性,由于它保证只能存储其所允许的范例。
更换方案
:在以前的 C++ 版本中,通常会使用联合(Union)范例来实现多态值的存储,但这种方法没有提供范例安全性,并且通常需要显式的范例检查和转换。std::variant 提供了一个更安全、更方便的更换方案。
2.2 简单示例
[code]#include #include #include int main() { std::variant v; v = 10; std::cout
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4