与传统的多态处理相比,使用 std::variant 有哪些优点?

2024-04-27

假设我有一个Shape基类和Circle, Line, and Point派生类。我有两个功能。

std::variant<Circle, Line, Point> process(const Shape &s);
Shape process(const Shape& s);

我可以传入任何派生类并在第二个函数中返回一个 Shape 对象,变体只是一个联合,可以在任何给定时间保存任何派生类变量。

现在与std::variant我还可以雇佣一个visitor我可以在其中根据我的变体当前持有的类型来处理某些函数(我可以创建一个函数对象并将其传递给std::transform并将其应用到我的每个对象)。不过,我可以做这个功能virtual在我的基类中,并让每个派生类实现它。

So, is variant只是一个方便吗?


那么,变体只是为了方便吗?

不,它们是不同的概念。主要区别在于一方面std::variant可以使用不相关的类型,包括内置类型,例如int直接使用虚函数是不可能的。另一边std::variant必须知道编译时正在使用的类型。例如,可以通过仅链接附加对象模块来添加具有虚拟函数的类型,而无需重新编译其余代码或将共享库动态加载到现有应用程序(您甚至不必重新启动应用程序),同时使用std::variant您必须重新编译处理类型的代码std::variant包含。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与传统的多态处理相比,使用 std::variant 有哪些优点? 的相关文章

随机推荐