Другой вариант Property, который был реально использован мною в работе, для передачи параметров командной строки в программу. Не имеет гибкости в используемых типах, но для данной задачи оказался весьма удобен.
DISCLAIMER: не пытайтесь применять данный паттерн в циклах и средах с недостатком ресурсов — на цикл чтение-запись одного параметра уходит 2-5 микросекунд, при большом кол-ве параметров.
В догонку к 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;
}