Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <variant>
- #include <vector>
- #include <type_traits>
- // Guitar class
- class Guitar {
- public:
- void play() const {
- std::cout << "Strumming the guitar!" << std::endl;
- }
- ~Guitar() {
- std::cout << "Guitar destructor called." << std::endl;
- }
- };
- // Drums class
- class Drums {
- public:
- void play() const {
- std::cout << "Beating the drums!" << std::endl;
- }
- ~Drums() {
- std::cout << "Drums destructor called." << std::endl;
- }
- };
- using Instrument = std::variant<Guitar, Drums>;
- int main() {
- std::vector<Instrument> instruments;
- instruments.emplace_back(Guitar());
- instruments.emplace_back(Drums());
- // C++20: Generic lambda with custom behavior based on type
- for (const auto& instrument : instruments) {
- std::visit([]<typename T>(const T& inst) {
- if constexpr (std::is_same_v<T, Guitar>) {
- std::cout << "This is a guitar: ";
- } else if constexpr (std::is_same_v<T, Drums>) {
- std::cout << "This is a drum set: ";
- }
- inst.play();
- }, instrument);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement