Giter Site home page Giter Site logo

variant's Introduction

Variant

A wrapper around std::variant with some helper functions

#include <ea_variant/ea_variant.h>
#include <iostream>
#include <vector>

struct First
{
    void process() const
    {
        std::cout << "I am first! My value is " << myValue << std::endl;
    }

    int myValue = 5;
};

struct Second
{
    void process() const
    {
        std::cout << "I am second! My value is " << text << std::endl;
    }

    std::string text = "Hello World";
};

int main()
{
    using Var = EA::Variant<First, Second>;
    std::vector<Var> container;

    container.emplace_back(First());
    container.emplace_back(First());
    container.emplace_back(Second());

    //Visit polymorphic call:
    for (auto& element: container)
        element.visit([](auto& obj) { obj.process(); });

    //Manual polymorphic call:
    for (auto& element: container)
    {
        if (auto* first = element.get<First>())
            first->process();
        else if (auto* second = element.get<Second>())
            second->process();
    }

    return 0;
}

I created this for a few reasons:

  1. std::visit has some issues in some compilers.
  2. A faster alternative, like rollbear::visit doesn't compile on MacOS
  3. I wanted to wrap this in a JUCE-style module
  4. I thought the syntax could be slightly simplified by wrapping in an object

How to use:

Include the ea_variant.h file. you can also use CMake to set up the include directories automatically

Visitation is using a modified version of: https://github.com/rollbear/visit

variant's People

Contributors

eyalamirmusic avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.