C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Afficher le contenu d'une std::list <boost::any> ?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Stephane Wirtel
Guest





PostPosted: Mon Jul 18, 2005 3:41 pm    Post subject: Afficher le contenu d'une std::list <boost::any> ? Reply with quote



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.

Bonne soirée,

Stéphane

Back to top
Stan
Guest





PostPosted: Mon Jul 18, 2005 4:38 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote





"Stephane Wirtel" <com.descasoft (AT) wirtel (DOT) stephane> a écrit dans le message de
news:dbgiko$587$1 (AT) news (DOT) brutele.be...
Quote:
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



Back to top
Stan
Guest





PostPosted: Mon Jul 18, 2005 5:11 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote




"Stephane Wirtel" <com.descasoft (AT) wirtel (DOT) stephane> a écrit dans le message de
news:dbgiko$587$1 (AT) news (DOT) brutele.be...
Quote:
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 .



Back to top
Stéphane Wirtel
Guest





PostPosted: Mon Jul 18, 2005 5:51 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

quel est la diff entre (*it).getValue () et it->getValue () ? Faudrait
m'expliquer, c'est un notation qui est différente, mais qui
représente la même chose.

Back to top
Falk Tannhäuser
Guest





PostPosted: Mon Jul 18, 2005 5:57 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

Stephane Wirtel wrote:
Quote:
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(&*it))
{
std::cout << "Name : " << f->getName();
std::cout << " Value : " << f->getValue() << 'n';
}else if(Field(&*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.

Pourquoi pas tout simplement

class FieldBase
{
public:
virtual std::string const& getName() const = 0;
virtual void printValue(std::ostream&) const = 0;
virtual ~FieldBase() {}
}; // class FieldBase

std::ostream& operator<<(std::ostream& o, FieldBase const& f) { f.printValue(o); return o; }

template {
public:
Field(const std::string& pFieldName) : mFieldValue(dataType()), mFieldName(pFieldName) {}
~Field() {}
std::string const& getName() const { return mFieldName; }
dataType getValue() const { return mFieldValue; }
void printValue(std::ostream& o) const { o << getValue(); }

private:
dataType mFieldValue;
std::string mFieldName;
}; // class Field


template typedef std::list<boost::shared_ptr Many;

....
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

Back to top
Stan
Guest





PostPosted: Mon Jul 18, 2005 6:18 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote


"Stéphane Wirtel" <stephane.wirtel (AT) gmail (DOT) com> a écrit dans le message de
news:1121709084.316431.313130 (AT) g47g2000cwa (DOT) googlegroups.com...
Quote:
quel est la diff entre (*it).getValue () et it->getValue () ? Faudrait
m'expliquer, c'est un notation qui est différente, mais qui
représente la même chose.

Le source envoyé est-il celui que tu as testé ?
Les deux notations fonctionnent.

--
-Stan



Back to top
Matthieu Moy
Guest





PostPosted: Mon Jul 18, 2005 6:24 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

"Stéphane Wirtel" <stephane.wirtel (AT) gmail (DOT) com> writes:

Quote:
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.

Pour un contre-exemple (laid, j'en conviens) :


#include <iostream>

using namespace std;

struct bar {
void f() {cout << "bar::f" << endl;}
};

struct foo {
bar * operator -> () {
cout << "->" << endl;
return new bar();
}

bar& operator * () {
cout << "*" << endl;
return *(new bar());
}
};

int main() {
foo F;
F->f();
(*F).f();
}

--
Matthieu

Back to top
Stephane Wirtel
Guest





PostPosted: Mon Jul 18, 2005 7:01 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

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 ?


Encore merci,

Stéphane
Back to top
Stephane Wirtel
Guest





PostPosted: Mon Jul 18, 2005 7:06 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

Je suis tout à fait d'accord avec toi, mais dans le cas de boost::any, rien ne change.
Back to top
Stéphane Wirtel
Guest





PostPosted: Mon Jul 18, 2005 9:08 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

Je viens de regarder plus attentivement, mais bien que la lecture soit
possible, aurais-tu une info pour pouvoir écrire dans ces différentes
variables ?

Pas facile en tout cas de trouver un design qui réponde à ma question
:|

Bonne soirée,

Stéphane

Back to top
Matthieu Moy
Guest





PostPosted: Mon Jul 18, 2005 9:10 pm    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

"Stéphane Wirtel" <stephane.wirtel (AT) gmail (DOT) com> writes:

Quote:
Je viens de regarder plus attentivement, [...]

Merci de citer la partie pertinente du message auquel tu réponds.
Sinon, on ne sait pas de quoi tu parles ...

--
Matthieu

Back to top
Stéphane Wirtel
Guest





PostPosted: Tue Jul 19, 2005 5:20 am    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

Excuse moi mathieu,

je parlais de la seconde partie du mail de Falk Tannhäuser en ce qui
concernet l'héritage de la classe FieldBase pour créer la classe
template Field.

La question était comment modifier la valeur du champs, je pensais à un
stringstream, que je passerais à une méthode virtuelle de FieldBase,
mais qui serait concrete dans la classe Field.

Qu'en penses-tu ?

Une autre idée ?

Back to top
Stan
Guest





PostPosted: Tue Jul 19, 2005 7:34 am    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote


"Stephane Wirtel" <stephane.wirtel (AT) belgacom (DOT) net> a écrit dans le message de
news: dbguam$b65$1 (AT) news (DOT) brutele.be...
Quote:
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



Back to top
Matthieu Moy
Guest





PostPosted: Tue Jul 19, 2005 8:06 am    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

"Stéphane Wirtel" <stephane.wirtel (AT) gmail (DOT) com> writes:

Quote:
Excuse moi mathieu,

Tu récidives, là Wink.

http://www.giromini.org/usenet-fr/repondre.html

--
Matthieu

Back to top
Stéphane Wirtel
Guest





PostPosted: Tue Jul 19, 2005 8:20 am    Post subject: Re: Afficher le contenu d'une std::list <boost::any> ? Reply with quote

Excuse moi Stan, je n'ai pas le temps d'y regarder au boulot, mais je
viens de m'envoyer le lien sur mon mail perso, ainsi j'y regarderai ce
soir.

J'ai vu qu'il y avait aussi une classe permettant de créer depuis du
SQL, des objets c++ correspondants à la structure des tables, du moins
j'espère que cela est bien le but.

Merci,

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.