struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
_Le fait de faire une de strucuture contenant un tableau de cette meme
strucutre pose il un probleme particulier?
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
_Le fait de faire une de strucuture contenant un tableau de cette meme
strucutre pose il un probleme particulier?
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
_Le fait de faire une de strucuture contenant un tableau de cette meme
strucutre pose il un probleme particulier?
Ataya wrote on 25/03/2006 16:55:
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une structure (par
le mot "struct") est "grossièrement équivalente" (pour des définitions
simples), une première différence
est simplement que tous les membres
d'une structure sont publics
(visibles de tous, partout) alors que les
membres d'une classe sont (implicitement) protégés.
Ataya wrote on 25/03/2006 16:55:
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une structure (par
le mot "struct") est "grossièrement équivalente" (pour des définitions
simples), une première différence
est simplement que tous les membres
d'une structure sont publics
(visibles de tous, partout) alors que les
membres d'une classe sont (implicitement) protégés.
Ataya wrote on 25/03/2006 16:55:
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une structure (par
le mot "struct") est "grossièrement équivalente" (pour des définitions
simples), une première différence
est simplement que tous les membres
d'une structure sont publics
(visibles de tous, partout) alors que les
membres d'une classe sont (implicitement) protégés.
les membres d'une classe sont
(implicitement) protégés.
Privé et non pas protégés.
Et par défaut uniquement aussi.
les membres d'une classe sont
(implicitement) protégés.
Privé et non pas protégés.
Et par défaut uniquement aussi.
les membres d'une classe sont
(implicitement) protégés.
Privé et non pas protégés.
Et par défaut uniquement aussi.
Etienne Rousee wrote on 25/03/2006 13:19:[*] En l'occurence, duplication de l'information "v1 est
voisine de v2", sous la forme "v2 est voisine de v1".
Ok, mais ce n'est pas bien gênant.
c'est même, imho, la meilleure façon (la plus rapide, la moins
coûteuse) pour permettre de trouver toutes les villes voisines
d'une ville quelconque.
mais Fabien a peut être un meilleur algo.
Etienne Rousee wrote on 25/03/2006 13:19:
[*] En l'occurence, duplication de l'information "v1 est
voisine de v2", sous la forme "v2 est voisine de v1".
Ok, mais ce n'est pas bien gênant.
c'est même, imho, la meilleure façon (la plus rapide, la moins
coûteuse) pour permettre de trouver toutes les villes voisines
d'une ville quelconque.
mais Fabien a peut être un meilleur algo.
Etienne Rousee wrote on 25/03/2006 13:19:[*] En l'occurence, duplication de l'information "v1 est
voisine de v2", sous la forme "v2 est voisine de v1".
Ok, mais ce n'est pas bien gênant.
c'est même, imho, la meilleure façon (la plus rapide, la moins
coûteuse) pour permettre de trouver toutes les villes voisines
d'une ville quelconque.
mais Fabien a peut être un meilleur algo.
Ataya wrote on 25/03/2006 16:55:struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une
structure (par le mot "struct") est "grossièrement
équivalente" (pour des définitions simples), une première
différence est simplement que tous les membres d'une structure
sont publics (visibles de tous, partout) alors que les membres
d'une classe sont (implicitement) protégés.
_Le fait de faire une de strucuture contenant un tableau de
cette meme strucutre pose il un probleme particulier?
cela vous impose simplement de déclarer la structure (le
"struct Ville;") avant de la définir (le "struct Ville {
la_definition };").
Ataya wrote on 25/03/2006 16:55:
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une
structure (par le mot "struct") est "grossièrement
équivalente" (pour des définitions simples), une première
différence est simplement que tous les membres d'une structure
sont publics (visibles de tous, partout) alors que les membres
d'une classe sont (implicitement) protégés.
_Le fait de faire une de strucuture contenant un tableau de
cette meme strucutre pose il un probleme particulier?
cela vous impose simplement de déclarer la structure (le
"struct Ville;") avant de la définir (le "struct Ville {
la_definition };").
Ataya wrote on 25/03/2006 16:55:struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
_Est-ce du c++ de déclarer les struct de cette manière?
en complément du point d'Etienne:
une déclaration de classe (par le mot "class") ou d'une
structure (par le mot "struct") est "grossièrement
équivalente" (pour des définitions simples), une première
différence est simplement que tous les membres d'une structure
sont publics (visibles de tous, partout) alors que les membres
d'une classe sont (implicitement) protégés.
_Le fait de faire une de strucuture contenant un tableau de
cette meme strucutre pose il un probleme particulier?
cela vous impose simplement de déclarer la structure (le
"struct Ville;") avant de la définir (le "struct Ville {
la_definition };").
Le fait de faire une de strucuture contenant un tableau de
meme cette strucutre pose il un probleme particulier?
cela vous impose simplement de déclarer la structure (le
"struct Ville;") avant de la définir (le "struct Ville {
la_definition };").
Même pas. Le « struct Ville » en tête de la définition suffit.
Le fait de faire une de strucuture contenant un tableau de
meme cette strucutre pose il un probleme particulier?
cela vous impose simplement de déclarer la structure (le
"struct Ville;") avant de la définir (le "struct Ville {
la_definition };").
Même pas. Le « struct Ville » en tête de la définition suffit.
Le fait de faire une de strucuture contenant un tableau de
meme cette strucutre pose il un probleme particulier?
cela vous impose simplement de déclarer la structure (le
"struct Ville;") avant de la définir (le "struct Ville {
la_definition };").
Même pas. Le « struct Ville » en tête de la définition suffit.
La question n'était pas "le fait de déclarer une classe avec le mot clé
struct etc", mais simplement "faire une structure".
Alors:
struct {
int x, y;
Ville* voisines;
} Ville;
est invalide, tandis que:
struct Ville;
struct {
int x, y;
Ville* voisines;
} Ville;
est valide.
(je sais "c'est pas du C++ etc, etc", mais c'est tout de même dans la
question).
La question n'était pas "le fait de déclarer une classe avec le mot clé
struct etc", mais simplement "faire une structure".
Alors:
struct {
int x, y;
Ville* voisines;
} Ville;
est invalide, tandis que:
struct Ville;
struct {
int x, y;
Ville* voisines;
} Ville;
est valide.
(je sais "c'est pas du C++ etc, etc", mais c'est tout de même dans la
question).
La question n'était pas "le fait de déclarer une classe avec le mot clé
struct etc", mais simplement "faire une structure".
Alors:
struct {
int x, y;
Ville* voisines;
} Ville;
est invalide, tandis que:
struct Ville;
struct {
int x, y;
Ville* voisines;
} Ville;
est valide.
(je sais "c'est pas du C++ etc, etc", mais c'est tout de même dans la
question).
Ce qu'il faut, évidemment, c'est un système de notification,
pour que quand je supprime une ville, toutes les villes voisines
en soient notifiées, pour en supprimer le rapport chez eux.
Dans le cas précis des villes, on pourrait imaginer que le
programme interdit les armes nucléaire, et donc, qu'on ne
supprime jamais de ville.
Mais en général, c'est un problème non
trivial qu'il faut toujours aborder. Et comme je dis, si Fabien,
ou qui que ce soit d'autre, en a une bonne solution, j'en suis
preneur.
Ce qu'il faut, évidemment, c'est un système de notification,
pour que quand je supprime une ville, toutes les villes voisines
en soient notifiées, pour en supprimer le rapport chez eux.
Dans le cas précis des villes, on pourrait imaginer que le
programme interdit les armes nucléaire, et donc, qu'on ne
supprime jamais de ville.
Mais en général, c'est un problème non
trivial qu'il faut toujours aborder. Et comme je dis, si Fabien,
ou qui que ce soit d'autre, en a une bonne solution, j'en suis
preneur.
Ce qu'il faut, évidemment, c'est un système de notification,
pour que quand je supprime une ville, toutes les villes voisines
en soient notifiées, pour en supprimer le rapport chez eux.
Dans le cas précis des villes, on pourrait imaginer que le
programme interdit les armes nucléaire, et donc, qu'on ne
supprime jamais de ville.
Mais en général, c'est un problème non
trivial qu'il faut toujours aborder. Et comme je dis, si Fabien,
ou qui que ce soit d'autre, en a une bonne solution, j'en suis
preneur.
wrote:Ce qu'il faut, évidemment, c'est un système de notification,
pour que quand je supprime une ville, toutes les villes
voisines en soient notifiées, pour en supprimer le rapport
chez eux. Dans le cas précis des villes, on pourrait
imaginer que le programme interdit les armes nucléaire, et
donc, qu'on ne supprime jamais de ville.
Aucun problème s'il travaille pour une assurance, les
conséquences de la désintégration du noyau de l?atome sont
toujours exclues :-)Mais en général, c'est un problème non trivial qu'il faut
toujours aborder. Et comme je dis, si Fabien, ou qui que ce
soit d'autre, en a une bonne solution, j'en suis preneur.
Ca laisse un peu l'impression qu'on pourrait démontrer que
c'est non résolvable de manière statique.
J'ai l'impression que cela peut cependant donner lieu à un bon
exemple d'utilisation des boost::weak_ptr.
La liste globales des villes serait gérée par des
boost::shared_ptr, les relations de voisinages par des
boost::weak_ptr, une suppression impromptue se régle
simplement en n'oubliant pas de tester l'échec de lock() sur
les weak_ptr.
D'ailleurs en fait, c'est un peu ce qui me manque par rapport
à boost, des examples concrets et parlant de comment utiliser
toutes les classes fournies dans la vraie vie, weak_ptr étant
un example parfait du cas où la première réaction est "à quoi
ça sert vraiment ce truc ?".
kanze.james@neuf.fr wrote:
Ce qu'il faut, évidemment, c'est un système de notification,
pour que quand je supprime une ville, toutes les villes
voisines en soient notifiées, pour en supprimer le rapport
chez eux. Dans le cas précis des villes, on pourrait
imaginer que le programme interdit les armes nucléaire, et
donc, qu'on ne supprime jamais de ville.
Aucun problème s'il travaille pour une assurance, les
conséquences de la désintégration du noyau de l?atome sont
toujours exclues :-)
Mais en général, c'est un problème non trivial qu'il faut
toujours aborder. Et comme je dis, si Fabien, ou qui que ce
soit d'autre, en a une bonne solution, j'en suis preneur.
Ca laisse un peu l'impression qu'on pourrait démontrer que
c'est non résolvable de manière statique.
J'ai l'impression que cela peut cependant donner lieu à un bon
exemple d'utilisation des boost::weak_ptr.
La liste globales des villes serait gérée par des
boost::shared_ptr, les relations de voisinages par des
boost::weak_ptr, une suppression impromptue se régle
simplement en n'oubliant pas de tester l'échec de lock() sur
les weak_ptr.
D'ailleurs en fait, c'est un peu ce qui me manque par rapport
à boost, des examples concrets et parlant de comment utiliser
toutes les classes fournies dans la vraie vie, weak_ptr étant
un example parfait du cas où la première réaction est "à quoi
ça sert vraiment ce truc ?".
wrote:Ce qu'il faut, évidemment, c'est un système de notification,
pour que quand je supprime une ville, toutes les villes
voisines en soient notifiées, pour en supprimer le rapport
chez eux. Dans le cas précis des villes, on pourrait
imaginer que le programme interdit les armes nucléaire, et
donc, qu'on ne supprime jamais de ville.
Aucun problème s'il travaille pour une assurance, les
conséquences de la désintégration du noyau de l?atome sont
toujours exclues :-)Mais en général, c'est un problème non trivial qu'il faut
toujours aborder. Et comme je dis, si Fabien, ou qui que ce
soit d'autre, en a une bonne solution, j'en suis preneur.
Ca laisse un peu l'impression qu'on pourrait démontrer que
c'est non résolvable de manière statique.
J'ai l'impression que cela peut cependant donner lieu à un bon
exemple d'utilisation des boost::weak_ptr.
La liste globales des villes serait gérée par des
boost::shared_ptr, les relations de voisinages par des
boost::weak_ptr, une suppression impromptue se régle
simplement en n'oubliant pas de tester l'échec de lock() sur
les weak_ptr.
D'ailleurs en fait, c'est un peu ce qui me manque par rapport
à boost, des examples concrets et parlant de comment utiliser
toutes les classes fournies dans la vraie vie, weak_ptr étant
un example parfait du cas où la première réaction est "à quoi
ça sert vraiment ce truc ?".
Jean-Marc Desperrier wrote:J'ai l'impression que cela peut cependant donner lieu à un bon
exemple d'utilisation des boost::weak_ptr.
Pas du tout. Il faut plus que simplement mettre à null un
pointeur.
La liste globales des villes serait gérée par des
boost::shared_ptr, les relations de voisinages par des
boost::weak_ptr, une suppression impromptue se régle
simplement en n'oubliant pas de tester l'échec de lock() sur
les weak_ptr.
Ce qui pose deux problèmes : d'abord, on a introduit une
collection globale qui n'y était pas avant, qu'il faut gerer, et
deuxièmement, on a une jolie fuite de mémoire, au moins qu'on
puisse garantir venir régarder les villes qui n'y sont plus dans
chacun des voisin d'avant.
Je n'ai pas attendu Boost pour avoir quelque chose d'équivalent,
mais je m'en suis servi en fait assez peu, parce que simplement
mettre à null un pointeur, c'est rare que ça suffisait.
Jean-Marc Desperrier wrote:
J'ai l'impression que cela peut cependant donner lieu à un bon
exemple d'utilisation des boost::weak_ptr.
Pas du tout. Il faut plus que simplement mettre à null un
pointeur.
La liste globales des villes serait gérée par des
boost::shared_ptr, les relations de voisinages par des
boost::weak_ptr, une suppression impromptue se régle
simplement en n'oubliant pas de tester l'échec de lock() sur
les weak_ptr.
Ce qui pose deux problèmes : d'abord, on a introduit une
collection globale qui n'y était pas avant, qu'il faut gerer, et
deuxièmement, on a une jolie fuite de mémoire, au moins qu'on
puisse garantir venir régarder les villes qui n'y sont plus dans
chacun des voisin d'avant.
Je n'ai pas attendu Boost pour avoir quelque chose d'équivalent,
mais je m'en suis servi en fait assez peu, parce que simplement
mettre à null un pointeur, c'est rare que ça suffisait.
Jean-Marc Desperrier wrote:J'ai l'impression que cela peut cependant donner lieu à un bon
exemple d'utilisation des boost::weak_ptr.
Pas du tout. Il faut plus que simplement mettre à null un
pointeur.
La liste globales des villes serait gérée par des
boost::shared_ptr, les relations de voisinages par des
boost::weak_ptr, une suppression impromptue se régle
simplement en n'oubliant pas de tester l'échec de lock() sur
les weak_ptr.
Ce qui pose deux problèmes : d'abord, on a introduit une
collection globale qui n'y était pas avant, qu'il faut gerer, et
deuxièmement, on a une jolie fuite de mémoire, au moins qu'on
puisse garantir venir régarder les villes qui n'y sont plus dans
chacun des voisin d'avant.
Je n'ai pas attendu Boost pour avoir quelque chose d'équivalent,
mais je m'en suis servi en fait assez peu, parce que simplement
mettre à null un pointeur, c'est rare que ça suffisait.