Pull to refresh

Property в C++ (с доступом по имени, но без сеттеров)

Reading time1 min
Views930
Другой вариант Property, который был реально использован мною в работе, для передачи параметров командной строки в программу. Не имеет гибкости в используемых типах, но для данной задачи оказался весьма удобен.

DISCLAIMER: не пытайтесь применять данный паттерн в циклах и средах с недостатком ресурсов — на цикл чтение-запись одного параметра уходит 2-5 микросекунд, при большом кол-ве параметров.

В догонку к Property в С++ на С++


#include <string>
#include <map>
#include <iostream>

using namespace std;

class PropertyVariant
{
    enum Type{ Null, Integer, String };

    int     ivalue;
    string  svalue;
    Type    type;
public:
    PropertyVariant()
    {
        type = Null;
    }
    PropertyVariant(const PropertyVariant &clone)
    {
        type = clone.type;
        ivalue = clone.ivalue;
        svalue = clone.svalue;
    }
    PropertyVariant( int val )
    {
        type = Integer;
        ivalue = val;
    }
    PropertyVariant( const string &val )
    {
        type = String;
        svalue = val;
    }
    PropertyVariant( const char *val )
    {
        type = String;
        svalue = val;
    }
    operator int()
    {
        if( type != Integer )
            throw runtime_error( "wrong type" );
        return ivalue;
    }
    operator string()
    {
        if( type != String )
            throw runtime_error( "wrong type" );
        return svalue;
    }
};

int main()
{
    map<string,PropertyVariant> variant_props;

    variant_props["Integer"] = 100;
    variant_props["String"] = "crazy_dev";

    string s = variant_props["String"];
    int i = variant_props["Integer"];

    return 0;
}
Tags:
Hubs:
0
Comments10

Articles

Change theme settings