Mut*_*thm 4 c++ variant boost-variant
假设我有一个Shape基类Circle,Line以及Point派生类。我有两个功能。
std::variant<Circle, Line, Point> process(const Shape &s);
Shape process(const Shape& s);
Run Code Online (Sandbox Code Playgroud)
我可以传入我的任何派生类并在第二个函数中返回一个 Shape 对象,变体只是一个联合,可以在任何给定时间保存我的任何派生类变量。
现在std::variant我还可以使用一个visitor我可以根据我的变体当前持有的类型处理一些函数的地方(我可以创建一个函数对象并传递它std::transform并将其应用于我的每个对象)。但是,我可以virtual在我的基类中创建该函数并让每个派生类实现它。
那么,variant仅仅是一种方便吗?
那么,变体只是一种方便吗?
不,它们是不同的概念。主要区别在于一方面std::variant可以使用不相关的类型,包括内置int函数,而虚拟函数则无法直接使用。另一方面std::variant必须知道它在编译时使用的类型。例如,它可以加入与通过仅链接附加对象模块虚拟功能(多个)类型而无需重新编译的代码的其余部分或动态加载共享库到现有的应用程序(你甚至不必重新启动应用程序),同时用std::variant你必须重新编译处理包含类型的代码std::variant。