ok, donc je suis un doute, je veux savoir si cela est possible:Problèmes avec boost :: ptr_vector et boost :: tout
J'utilise une base de données, avec des données génériques (chaînes, ints, bools, etc ...). Chaque fois qu'un objet est construit ou qu'un membre d'un objet est modifié, je dois interroger la base de données avec l'action spécifique (SELECT ou UPDATE). Tout d'abord, ce n'est pas une question liée à la base de données, mon vrai problème est que j'ai un ptr_vector qui contient les pointeurs boost :: any vers les membres de l'objet. Dans le code comme ceci:
class Enemy{
private:
//some private data...
public:
auto_ptr<int> ID_Enemy;
auto_ptr<string> Enemy_Name;
//miscellaneous methods...
};
alors je passe les membres que je veux modifier une fonction d'une autre classe divers qui prend comme argument un coup de pouce :: * tout:
misc_class.addValues((boost::any*)(ID_Enemy.get()));
misc_class.addValues((boost::any*)(Enemy_Name.get()));
cette même classe accepte le any *, et fait ce qui suit:
auto_ptr<boost::any> val2(val); //being val, the passed any*
Enemy_Values.push_back(val2);
Enemy_Values est un vecteur ptr_vector. Alors, quand j'accéder à ce misc_class qui a Enemy_Values en tant que membre, je souhaite modifier la valeur à laquelle un auto_ptr est à l'intérieur de pointe:
misc_class.Enemy_Values[0] = (boost::any)(69);
Et ici, je reçois une erreur de violation. J'ai essayé beaucoup de choses, et quelqu'un m'a dit que je ne devrais pas utiliser les conteneurs de auto_ptr ou convertir d'avant en arrière avec boost :: any. Est-ce que c'est ce que je suis en train de faire, ou y a-t-il une meilleure façon et plus intuitive?
Merci d'avance.