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

.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.