Minimum viable declarative GUI in C++

This page summarizes the projects mentioned and recommended in the original post on /r/cpp

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • magic_get

    std::tuple like methods for user defined types without any macro or boilerplate code

  • No RTTI required, but the types are required to be aggregates (no constructors defined). It's possible to count the number of members using SFINAE by trying different numbers of inputs to the aggregate constructor using a type that's castable to anything, and then enumerate the members with a similar trick (or use structured binding to pull them out directly). I think he uses magic_get which is the most popular library for this trick.

  • pfr

    std::tuple like methods for user defined types without any macro or boilerplate code

  • The code is relatively short and can be groked with a few coffees: https://github.com/boostorg/pfr/tree/develop/include/boost/pfr ; if you're using C++17 it uses a binary search (https://github.com/boostorg/pfr/blob/develop/include/boost/pfr/detail/fields_count.hpp) to count the number of fields in a struct, by starting by the observation that a likely majorant on the number of fields in a struct is sizeof(the struct) * CHAR_BIT, assuming not too many [[no_unique_address]] tomfooleries. Then once this count is known it's possible to simply map them as a tuple through sheer brute force and destructuring: https://github.com/boostorg/pfr/blob/develop/include/boost/pfr/detail/core17_generated.hpp

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • score

    ossia score, an interactive sequencer for the intermedia arts

  • A lot of those are tied to a specific environment / runtime API, and if you want to use the same algorithm in another environment (in my case, the one I am developing: https://ossia.io) , you have to basically rewrite the whole thing as the framework permeates every part of the code, or import the whole environment and pay the performance price for converting from your run-time types against their run-time types, integrate their UI library (embedding a plug-in UI made with, say, NanoVG, in a Qt QGraphicsScene is not exactly a fun thing to do).

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts