Skip to content

A library of types and functions to create strong type aliases

License

Notifications You must be signed in to change notification settings

fmorgner/newtype

Repository files navigation

newtype

The newtype library provides types and functions to facilitate the creation of strong type aliases.

C++20 GitHub license Documentation Status travis Download the latest version on conan Support the project with Bitcoin

Usage

The code block below demonstrates the basic usage and features of newtype. For a more details description of the library, as well as a full API documentation, please read the docs (also available as a PDF file).

#include <newtype/derivable.hpp>
#include <newtype/deriving.hpp>
#include <newtype/new_type.hpp>

#include <iostream>

using Width = nt::new_type<unsigned int, struct width_tag, deriving(nt::Read)>;
using Height = nt::new_type<unsigned int, struct height_tag, deriving(nt::Read)>;
using Area = nt::new_type<unsigned int, struct area_tag, deriving(nt::Show)>;

struct Rectangle
{
  constexpr Rectangle(Width w, Height h)
      : width{w}
      , height{h}
  {
  }

  auto constexpr area() const noexcept -> Area
  {
    return {width.decay() * height.decay()};
  }

private:
  Width width;
  Height height;
};

int main()
{
  auto width = Width{};
  auto height = Height{};

  std::cin >> width >> height;

  auto rect = Rectangle{width, height};

  std::cout << rect.area() << '\n';
}

Requirements

This library uses features of C++20 and thus requires a modern compiler. All development was done on GCC 9.2. This is a header-only library, and thus no compilation is need if you want to use it in your project. If you want to run the sanity-checks/unit-test, you will need at least CMake 3.9.0. If you want to build to documentation, you will need either a local installation of sphinx, or alternatively pipenv. A Pipfile is provided in the directory docs within the source root.

About

A library of types and functions to create strong type aliases

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published