How do I use heterogeneous lookup with std::vector?

Heterogeneous lookup allows you to access elements of different types from a collection like std::vector. In C++, std::vector can store objects of a common base class, allowing for polymorphic behavior. Below is an example demonstrating how to do this.

#include <iostream> #include <vector> #include <memory> class Base { public: virtual void show() const { std::cout << "Base class" << std::endl; } virtual ~Base() {} }; class DerivedA : public Base { public: void show() const override { std::cout << "DerivedA class" << std::endl; } }; class DerivedB : public Base { public: void show() const override { std::cout << "DerivedB class" << std::endl; } }; int main() { std::vector<std::unique_ptr<Base>> vec; vec.push_back(std::make_unique<DerivedA>()); vec.push_back(std::make_unique<DerivedB>()); for (const auto& item : vec) { item->show(); // Heterogeneous lookup } return 0; }

C++ heterogeneous lookup std::vector polymorphism base class derived class unique_ptr