Coder Social home page Coder Social logo

compressed_pair's Introduction

Compressed_pair

Purpose

The compressed pair class is very similar to std::pair, but if either of the template arguments are empty classes, then the "empty base-class optimization" is applied to compress the size of the pair.

#include <iostream>
#include <format>
#include "compressed_pair.hxx"


struct point
{
    float x, y;
    constexpr point(float a, float b) noexcept : x(a), y(b) {}
};

int main()
{

    // direct initialization of compressed_pair with multi-parameter constructors
    [[maybe_unused]] auto points = compressed_pair<point, point>( 
                                            std::piecewise_construct,
                                            std::forward_as_tuple(2.35f, 3.5f),
                                            std::forward_as_tuple(6.35f, 7.89f));


    std::cout 
        << std::format("p1 [ x: {.2f}, y: {.2f} ]", points.first().x, point.first().y) <<
    std::endl;

    std::cout 
        << std::format("p1 [ x: {.2f}, y: {.2f} ]", points.second().x, point.second().y) <<
    std::endl;

    std::puts("\n------------------------------\n");

    // structured binding support
    auto [p1, p2] = points;


    std::cout 
        << std::format("p1 [ x: {.2f}, y: {.2f} ]", p1.x, p1.y) <<
    std::endl;

    std::cout 
        << std::format("p1 [ x: {.2f}, y: {.2f} ]", p2.x, p2.y) <<
    std::endl;
}

compressed_pair's People

Contributors

mo1791 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.