.. ot-topic:: cxx11.embedded_problems.virtual_vs_nonvirtual :dependencies: cxx11.miscellaneous.variant, cxx03.inheritance_oo.interface .. include:: Replacing ``virtual`` With ``std::variant<>`` (In Real Life) ============================================================ .. sidebar:: **See also** * :doc:`/trainings/material/soup/cxx03/100-inheritance-oo-design/group` * :doc:`/trainings/material/soup/cxx11/100-miscellaneous/any-variant-optional/variant` .. contents:: :local: Classic OO Design ----------------- Source Hierarchy ................ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-virtual/toolcase/source.h :caption: :download:`Interface: source.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-virtual/toolcase/source-copyable.h :caption: :download:`Implementation: source-copyable.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-virtual/toolcase/source-movable.h :caption: :download:`Implementation: source-movable.h ` :language: c++ Sink Hierarchy .............. .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-virtual/toolcase/sink.h :caption: :download:`Interface: sink.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-virtual/toolcase/sink-copyable.h :caption: :download:`Implementation: sink-copyable.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-virtual/toolcase/sink-movable.h :caption: :download:`Implementation: sink-movable.h ` :language: c++ Loop In The Middle .................. .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-virtual/toolcase/loop.h :caption: :download:`loop.h ` :language: c++ Omitting ``virtual``: Cram All Alternatives Into ``std::variant<>`` ------------------------------------------------------------------- Source Non-Hierarchy .................... .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-nonvirtual/source.h :caption: :download:`Non-Interface: source.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-nonvirtual/source-a.h :caption: :download:`Implementation: source-a.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-nonvirtual/source-b.h :caption: :download:`Implementation: source-b.h ` :language: c++ Sink Non-Hierarchy .................. .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-nonvirtual/sink.h :caption: :download:`Non-Interface: sink.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-nonvirtual/sink-1.h :caption: :download:`Implementation: sink-1.h ` :language: c++ .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-nonvirtual/sink-2.h :caption: :download:`Implementation: sink-2.h ` :language: c++ Loop In The Middle .................. .. literalinclude:: /trainings/material/soup/cxx-code/embedded-virtual-or-not/embedded-nonvirtual/loop.h :caption: :download:`loop.h ` :language: c++