registre parametres template
bonjour ,
pour mon application j'essaye de mettre en place un 'registre' pour stocker des valeurs diverses issues de l'interface pour les transmettre à des parties plus profondes de mon prog.
Apres quelques essais je suis bloqué(int float), il doit y avoir plus simple et plus propre mais je ne sais pas comment faire.
Si quelqu'un a une idée ça seait cool:lol:
.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| #ifndef PARAMSREGISTER_H
#define PARAMSREGISTER_H
#include <string>
#include <vector>
#include <sstream>
#include <stdlib.h>
class ParamsRegister
{
public:
ParamsRegister();
virtual ~ParamsRegister();
void set(std::string name, int value);
void set(std::string name, float value);
template <class T>
T get( std::string name);
protected:
private:
template<class T>
std::string toString ( T value);
enum etype { INT_TYPE, FLOAT_TYPE };
struct param
{
std::string name;
std::string value;
etype type;
};
std::vector<param> mvParams;
};
template <class T>
T ParamsRegister::get( std::string name)
{
for( auto i : mvParams)
{
if (i.name == name)
{
switch( i.type)
{
case INT_TYPE:
{
int v = atoi( i.value.c_str() );
return v;
break;
}
case FLOAT_TYPE:
{
float v = atof( i.value.c_str() );
return v;
break;
}
}
}
}
}
template<class T>
std::string ParamsRegister::toString ( T value)
{
std::stringstream sstr;
sstr << value;
return sstr.str();
}
#endif // PARAMSREGISTER_H |
.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#include "ParamsRegister.h"
ParamsRegister::ParamsRegister()
{
//ctor
}
ParamsRegister::~ParamsRegister()
{
//dtor
}
void ParamsRegister::set(std::string name, int value)
{
param p;
p.type = INT_TYPE;
p.name = name;
p.value = toString( value);
mvParams.push_back( p);
}
void ParamsRegister::set(std::string name, float value)
{
param p;
p.type = FLOAT_TYPE;
p.name = name;
p.value = toString( value);
mvParams.push_back( p);
} |
Merci.