Many many;
many.push_back (Field <int> ("Age"));
many.push_back (Field <bool> ("IsValue"));
Mon soucis est que lorsque je désire afficher le contenu de la liste des Field
se trouvant dans ma std::list, j'ai une erreur lors de la compilation me disant
que mon getValue et getName ne sont pas joignable.
Donc, par exemple, ceci ne fonctionne pas :|
for (Many::iterator it = many.begin (); it != many.end (); ++it) {
std::cout << "Name : " << it->getName () << std::endl;
std::cout << " Value : " << it->getValue () << std::endl;
}
Peut-être avez-vous déjà songé à ce problème, mais auriez-vous peut-être déjà trouvé une solution ?
En tout cas, ce soir en rentrant du boulot, je regarderai encore pour trouver une solution à mon problème.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stan
"Stephane Wirtel" a écrit dans le message de news:dbgiko$587$ | Bonjour à tous, | | En regardant dans les exemples de Boost::Any, j'ai créé une liste contenant des données de types différents. | | Par exemple le code suivant (imaginé de toute pièce) fonctionne (car testé hier soir). | | | template <typename dataType> class Field { | public: | Field (const std::string& pFieldName) : mFieldName (pFieldName), mFieldValue (dataType ()) { | } | ~Field () { | } | const std::string& getName () const { | return mFieldName; | } | dataType getValue () { | return mFieldValue; | } | private: | dataType mFieldValue; | std::string mFieldName; | }; | | typedef std::list <boost::any> Many; | | Many many; | many.push_back (Field <int> ("Age")); | many.push_back (Field <bool> ("IsValue")); | | Mon soucis est que lorsque je désire afficher le contenu de la liste des Field | se trouvant dans ma std::list, j'ai une erreur lors de la compilation me disant | que mon getValue et getName ne sont pas joignable. | | Donc, par exemple, ceci ne fonctionne pas :| | | for (Many::iterator it = many.begin (); it != many.end (); ++it) { | std::cout << "Name : " << it->getName () << std::endl; | std::cout << " Value : " << it->getValue () << std::endl; | } | | Peut-être avez-vous déjà songé à ce problème, mais auriez-vous peut-être déjà trouvé une solution ? | En tout cas, ce soir en rentrant du boulot, je regarderai encore pour trouver une solution à mon problème. |
for (Many::iterator it = many.begin (); it != many.end (); ++it) { std::cout << "Name : " << it.getName () << std::endl; std::cout << " Value : " << it.getValue () << std::endl; }
-- -Stan
"Stephane Wirtel" <com.descasoft@wirtel.stephane> a écrit dans le message de
news:dbgiko$587$1@news.brutele.be...
| Bonjour à tous,
|
| En regardant dans les exemples de Boost::Any, j'ai créé une liste
contenant des données de types différents.
|
| Par exemple le code suivant (imaginé de toute pièce) fonctionne (car testé
hier soir).
|
|
| template <typename dataType> class Field {
| public:
| Field (const std::string& pFieldName) : mFieldName (pFieldName),
mFieldValue (dataType ()) {
| }
| ~Field () {
| }
| const std::string& getName () const {
| return mFieldName;
| }
| dataType getValue () {
| return mFieldValue;
| }
| private:
| dataType mFieldValue;
| std::string mFieldName;
| };
|
| typedef std::list <boost::any> Many;
|
| Many many;
| many.push_back (Field <int> ("Age"));
| many.push_back (Field <bool> ("IsValue"));
|
| Mon soucis est que lorsque je désire afficher le contenu de la liste des
Field
| se trouvant dans ma std::list, j'ai une erreur lors de la compilation me
disant
| que mon getValue et getName ne sont pas joignable.
|
| Donc, par exemple, ceci ne fonctionne pas :|
|
| for (Many::iterator it = many.begin (); it != many.end (); ++it) {
| std::cout << "Name : " << it->getName () << std::endl;
| std::cout << " Value : " << it->getValue () << std::endl;
| }
|
| Peut-être avez-vous déjà songé à ce problème, mais auriez-vous peut-être
déjà trouvé une solution ?
| En tout cas, ce soir en rentrant du boulot, je regarderai encore pour
trouver une solution à mon problème.
|
for (Many::iterator it = many.begin (); it != many.end (); ++it) {
std::cout << "Name : " << it.getName () << std::endl;
std::cout << " Value : " << it.getValue () << std::endl;
}
"Stephane Wirtel" a écrit dans le message de news:dbgiko$587$ | Bonjour à tous, | | En regardant dans les exemples de Boost::Any, j'ai créé une liste contenant des données de types différents. | | Par exemple le code suivant (imaginé de toute pièce) fonctionne (car testé hier soir). | | | template <typename dataType> class Field { | public: | Field (const std::string& pFieldName) : mFieldName (pFieldName), mFieldValue (dataType ()) { | } | ~Field () { | } | const std::string& getName () const { | return mFieldName; | } | dataType getValue () { | return mFieldValue; | } | private: | dataType mFieldValue; | std::string mFieldName; | }; | | typedef std::list <boost::any> Many; | | Many many; | many.push_back (Field <int> ("Age")); | many.push_back (Field <bool> ("IsValue")); | | Mon soucis est que lorsque je désire afficher le contenu de la liste des Field | se trouvant dans ma std::list, j'ai une erreur lors de la compilation me disant | que mon getValue et getName ne sont pas joignable. | | Donc, par exemple, ceci ne fonctionne pas :| | | for (Many::iterator it = many.begin (); it != many.end (); ++it) { | std::cout << "Name : " << it->getName () << std::endl; | std::cout << " Value : " << it->getValue () << std::endl; | } | | Peut-être avez-vous déjà songé à ce problème, mais auriez-vous peut-être déjà trouvé une solution ? | En tout cas, ce soir en rentrant du boulot, je regarderai encore pour trouver une solution à mon problème. |
for (Many::iterator it = many.begin (); it != many.end (); ++it) { std::cout << "Name : " << it.getName () << std::endl; std::cout << " Value : " << it.getValue () << std::endl; }
-- -Stan
Stan
"Stephane Wirtel" a écrit dans le message de news:dbgiko$587$ | Bonjour à tous, | | En regardant dans les exemples de Boost::Any, j'ai créé une liste contenant des données de types différents. | | Par exemple le code suivant (imaginé de toute pièce) fonctionne (car testé hier soir). | | | template <typename dataType> class Field { | public: | Field (const std::string& pFieldName) : mFieldName (pFieldName), mFieldValue (dataType ()) { | } | ~Field () { | } | const std::string& getName () const { | return mFieldName; | } | dataType getValue () { | return mFieldValue; | } | private: | dataType mFieldValue; | std::string mFieldName; | }; | | typedef std::list <boost::any> Many; | | Many many; | many.push_back (Field <int> ("Age")); | many.push_back (Field <bool> ("IsValue")); | | Mon soucis est que lorsque je désire afficher le contenu de la liste des Field | se trouvant dans ma std::list, j'ai une erreur lors de la compilation me disant | que mon getValue et getName ne sont pas joignable. | | Donc, par exemple, ceci ne fonctionne pas :| | | for (Many::iterator it = many.begin (); it != many.end (); ++it) { | std::cout << "Name : " << it->getName () << std::endl; | std::cout << " Value : " << it->getValue () << std::endl; | } | | Peut-être avez-vous déjà songé à ce problème, mais auriez-vous peut-être déjà trouvé une solution ? | En tout cas, ce soir en rentrant du boulot, je regarderai encore pour trouver une solution à mon problème. |
for (Many::iterator it = many.begin (); it != many.end (); ++it) { std::cout << "Name : " << (*it).getName () << std::endl; std::cout << " Value : " << (*it).getValue () << std::endl; }
Mais il y a mieux.
--
Stan .
"Stephane Wirtel" <com.descasoft@wirtel.stephane> a écrit dans le message de
news:dbgiko$587$1@news.brutele.be...
| Bonjour à tous,
|
| En regardant dans les exemples de Boost::Any, j'ai créé une liste
contenant des données de types différents.
|
| Par exemple le code suivant (imaginé de toute pièce) fonctionne (car testé
hier soir).
|
|
| template <typename dataType> class Field {
| public:
| Field (const std::string& pFieldName) : mFieldName (pFieldName),
mFieldValue (dataType ()) {
| }
| ~Field () {
| }
| const std::string& getName () const {
| return mFieldName;
| }
| dataType getValue () {
| return mFieldValue;
| }
| private:
| dataType mFieldValue;
| std::string mFieldName;
| };
|
| typedef std::list <boost::any> Many;
|
| Many many;
| many.push_back (Field <int> ("Age"));
| many.push_back (Field <bool> ("IsValue"));
|
| Mon soucis est que lorsque je désire afficher le contenu de la liste des
Field
| se trouvant dans ma std::list, j'ai une erreur lors de la compilation me
disant
| que mon getValue et getName ne sont pas joignable.
|
| Donc, par exemple, ceci ne fonctionne pas :|
|
| for (Many::iterator it = many.begin (); it != many.end (); ++it) {
| std::cout << "Name : " << it->getName () << std::endl;
| std::cout << " Value : " << it->getValue () << std::endl;
| }
|
| Peut-être avez-vous déjà songé à ce problème, mais auriez-vous peut-être
déjà trouvé une solution ?
| En tout cas, ce soir en rentrant du boulot, je regarderai encore pour
trouver une solution à mon problème.
|
for (Many::iterator it = many.begin (); it != many.end (); ++it) {
std::cout << "Name : " << (*it).getName () << std::endl;
std::cout << " Value : " << (*it).getValue () << std::endl;
}
"Stephane Wirtel" a écrit dans le message de news:dbgiko$587$ | Bonjour à tous, | | En regardant dans les exemples de Boost::Any, j'ai créé une liste contenant des données de types différents. | | Par exemple le code suivant (imaginé de toute pièce) fonctionne (car testé hier soir). | | | template <typename dataType> class Field { | public: | Field (const std::string& pFieldName) : mFieldName (pFieldName), mFieldValue (dataType ()) { | } | ~Field () { | } | const std::string& getName () const { | return mFieldName; | } | dataType getValue () { | return mFieldValue; | } | private: | dataType mFieldValue; | std::string mFieldName; | }; | | typedef std::list <boost::any> Many; | | Many many; | many.push_back (Field <int> ("Age")); | many.push_back (Field <bool> ("IsValue")); | | Mon soucis est que lorsque je désire afficher le contenu de la liste des Field | se trouvant dans ma std::list, j'ai une erreur lors de la compilation me disant | que mon getValue et getName ne sont pas joignable. | | Donc, par exemple, ceci ne fonctionne pas :| | | for (Many::iterator it = many.begin (); it != many.end (); ++it) { | std::cout << "Name : " << it->getName () << std::endl; | std::cout << " Value : " << it->getValue () << std::endl; | } | | Peut-être avez-vous déjà songé à ce problème, mais auriez-vous peut-être déjà trouvé une solution ? | En tout cas, ce soir en rentrant du boulot, je regarderai encore pour trouver une solution à mon problème. |
for (Many::iterator it = many.begin (); it != many.end (); ++it) { std::cout << "Name : " << (*it).getName () << std::endl; std::cout << " Value : " << (*it).getValue () << std::endl; }
Mais il y a mieux.
--
Stan .
Falk Tannhäuser
Stephane Wirtel wrote:
Donc, par exemple, ceci ne fonctionne pas :|
for (Many::iterator it = many.begin (); it != many.end (); ++it) { std::cout << "Name : " << it->getName () << std::endl; std::cout << " Value : " << it->getValue () << std::endl; }
for(Many::iterator it = many.begin(); it != many.end(); ++it) { if(Field<int>* f = boost::any_cast<Field<int> >(&*it)) { std::cout << "Name : " << f->getName(); std::cout << " Value : " << f->getValue() << 'n'; }else if(Field<bool>* f = boost::any_cast<Field<bool> >(&*it)) { std::cout << "Name : " << f->getName(); std::cout << " Value : " << f->getValue() << 'n'; } }
mais c'est moche car il faut ajouter un nouveau test pour chaque nouveau type.
... Many many; many.push_back(make_shared_ptr(new Field<int>("Age"))); many.push_back(make_shared_ptr(new Field<bool>("IsValue")));
for(Many::iterator it = many.begin(); it != many.end(); ++it) { std::cout << "Name : " << (**it).getName(); std::cout << " Value : " << **it << 'n'; }
Falk
Matthieu Moy
"Stéphane Wirtel" writes:
quel est la diff entre (*it).getValue () et it->getValue () ?
Avec des vrais pointeurs, aucune.
Avec des types définis par l'utilisateur, en surchargeant les opérateurs "*" et "->", c'est la responsabilité de l'utilisateur de faire en sorte que ce soit la même chose. En général, c'est le cas.
quel est la diff entre (*it).getValue () et it->getValue () ?
Avec des vrais pointeurs, aucune.
Avec des types définis par l'utilisateur, en surchargeant les
opérateurs "*" et "->", c'est la responsabilité de l'utilisateur de
faire en sorte que ce soit la même chose. En général, c'est le cas.
quel est la diff entre (*it).getValue () et it->getValue () ?
Avec des vrais pointeurs, aucune.
Avec des types définis par l'utilisateur, en surchargeant les opérateurs "*" et "->", c'est la responsabilité de l'utilisateur de faire en sorte que ce soit la même chose. En général, c'est le cas.
L'idée est de pouvoir créer une liste de champs d'une table, afin de ne plus devoir les introduire à la main dans la requête SQL, ce qui me permettrait de diminuer les erreurs dans les requetes SQL.
Sinon, est-ce que quelqu'un connait une lib qui fait environ ce que j'aimerais ?
Encore merci,
Stéphane
Merci pour la solution,
L'idée est de pouvoir créer une liste de champs d'une table, afin de ne plus devoir les introduire à
la main dans la requête SQL, ce qui me permettrait de diminuer les erreurs dans les requetes SQL.
Sinon, est-ce que quelqu'un connait une lib qui fait environ ce que j'aimerais ?
L'idée est de pouvoir créer une liste de champs d'une table, afin de ne plus devoir les introduire à la main dans la requête SQL, ce qui me permettrait de diminuer les erreurs dans les requetes SQL.
Sinon, est-ce que quelqu'un connait une lib qui fait environ ce que j'aimerais ?
Encore merci,
Stéphane
Stephane Wirtel
Je suis tout à fait d'accord avec toi, mais dans le cas de boost::any, rien ne change.
Je suis tout à fait d'accord avec toi, mais dans le cas de boost::any, rien ne change.
Merci de citer la partie pertinente du message auquel tu réponds. Sinon, on ne sait pas de quoi tu parles ...
-- Matthieu
Stan
"Stephane Wirtel" a écrit dans le message de news: dbguam$b65$
Merci pour la solution,
L'idée est de pouvoir créer une liste de champs d'une table, afin de ne plus devoir les introduire à la main dans la requête SQL, ce qui me permettrait de diminuer les erreurs dans les requetes SQL.
Sinon, est-ce que quelqu'un connait une lib qui fait environ ce que j'aimerais ?
Ce que tu veux faire semble être un wrapper. Il en existe :
http://www.alhem.net/project/mysql/index.html
-- -Stan
"Stephane Wirtel" <stephane.wirtel@belgacom.net> a écrit dans le message de
news: dbguam$b65$1@news.brutele.be...
Merci pour la solution,
L'idée est de pouvoir créer une liste de champs d'une table, afin de ne
plus devoir les introduire à la main dans la requête SQL, ce qui me
permettrait de diminuer les erreurs dans les requetes SQL.
Sinon, est-ce que quelqu'un connait une lib qui fait environ ce que
j'aimerais ?
Ce que tu veux faire semble être un wrapper.
Il en existe :
"Stephane Wirtel" a écrit dans le message de news: dbguam$b65$
Merci pour la solution,
L'idée est de pouvoir créer une liste de champs d'une table, afin de ne plus devoir les introduire à la main dans la requête SQL, ce qui me permettrait de diminuer les erreurs dans les requetes SQL.
Sinon, est-ce que quelqu'un connait une lib qui fait environ ce que j'aimerais ?
Ce que tu veux faire semble être un wrapper. Il en existe :