Giter Club home page Giter Club logo

varianttalk's Introduction

Example code for my talk "std::variant and the Power of Pattern Matching"

This repository contains the example code shown in my presentation "std::variant and the power of pattern matching". To build, a C++ 17 compatible compiler is required. I have tested it on the following compilers:

  • Microsoft Visual Studio 2017 (version 15.8.9)
  • clang 7.0.0 (with libc++)

In addition, the library SFML is required. I tested versions 2.4 and 2.5. On Mac OS, you can install it via homebrew:

brew install sfml

You can also find the slides for my presentation in the slides directory.

All the code in this repository is shared under the MIT license (see LICENSE).

Blog post

I wrote a guest post for Bartek's coding blog, which focuses specifically on the state machine/space game part of this talk.

Licenses for graphics/fonts

There are some non-code assets in the state-machine/resources directory. Except for the following exceptions, these files are made by me and covered by a Creative Commons "CC by" license.

The following files are Copyright Ascender (see Apache-License.txt):

  • DroidSans.ttf
  • DroidSans-Bold.ttf

The following file is Copyright ESA, NASA, and L. Calcada (ESO for STScI) (see NASA-License.txt):

varianttalk's People

Contributors

lethal-guitar avatar fenbf avatar beached avatar

Stargazers

 avatar Longshan Du avatar nil avatar  avatar Joe Hosteny avatar Matthew Han avatar Christopher Layne avatar  avatar  avatar givans_ avatar Paul McGee avatar  avatar Pavel Galushin avatar Salim Pamukcu avatar Dan Vonk avatar Honey Sukesan avatar Tomas Fernando Wallick avatar Shawn Feng avatar Devspace avatar Pavel Kucherov avatar Mykhailo Piddubnyi avatar Sonny Kurniawan avatar Pawel avatar Cezary Janiak avatar Rajesh  avatar mutouyuguo avatar Amy Parent avatar Kobi Cohen-Arazi avatar  avatar  avatar R S avatar Shivendra Agarwal avatar DazMan66 avatar  avatar  avatar Eduardo Cáceres avatar Vangelis Tsiatsianas avatar David Cecil avatar Wilfried Le Cor avatar  avatar  avatar Georg Wehrmann avatar

Watchers

James Cloos avatar  avatar  avatar  avatar Vallenstriker avatar

varianttalk's Issues

private variants

After the talk I suggested a downside to variants being complete, so extending a variant later (e.g. in the case of events). I came up with a possible solution:

namespace nonexhaustive_variant {
namespace detail {
template <class... T>
class nonexhaustive_variant {
  struct P {};

 public:
  using type = std::variant<T..., P>;
};
}  // namespace detail

template <class... T>
using nonexhaustive_variant = typename detail::nonexhaustive_variant<T...>::type;
}  // namespace nonexhaustive_variant

using nonexhaustive_variant forces users of match to always provide a generic matcher:

struct A {};
struct B {};

using V = nonexhaustive_variant::nonexhaustive_variant<A, B>;

void foo(const V& v) {
  match(v,  //
        [](const A&) { std::cout << "A" << std::endl; },
        [](const B&) { std::cout << "B" << std::endl; },
        [](const auto&) { std::cout << "???" << std::endl; });
}

Since the type P is private since it cannot be matched explicitely. This allows extending V in an interface without breaking all users of a library.

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.