Tenir compte de la classe suivante:Existe-t-il un objet fonction pour créer des objets dans STL?
class Person {
public:
// I don't want any "char *" to be converted to Person implicitly!
explicit Person(const char * name) : name_(name) {};
private:
std::string name_;
};
Voir également tableau suivant des données char *:
char STUDENT_NAMES[][20] = {
"Bart",
"Liza",
"Maggie"
};
Maintenant, je veux créer std :: liste de personne selon ce tableau. Tout ce que je pourrais inventer est d'utiliser std :: algorithme de transformation avec un objet de fonction écrite à la main:
struct CreatePerson : public std::unary_function<const char*,Person> {
Person operator() (const char * name) const {
return Person(name);
};
};
// ...
std::list<Person> students;
std::transform(
&STUDENT_NAMES[ 0 ],
&(STUDENT_NAMES[ sizeof(STUDENT_NAMES)/sizeof(STUDENT_NAMES[0]) ]),
front_inserter(students),
CreatePerson());
// ...
Y at-il plus court et/ou de façon plus claire de le faire? Peut-être certains objets de fonction standard ou des adaptateurs?
J'espère que cette calcs du tableau sont en ce moment, enfin. Ignorez mes commentaires muets ce que j'avais temporaire dans ma réponse sur ce qui donne quel type. Srsly, tableau hax le matin me fait mal au cerveau :) Cependant, je vous recommande toujours de faire 'STUDENT_NAMES' un' char const * noms [] = {"Bart", "Lisa", ...}; '- de cette façon il ne peut plus dépasser la limite de 20 char. Je ne connais cependant pas votre code-base. Y avait-il une forte raison pour que vous le fassiez de cette façon? –
Votre solution semble bonne, merci! A propos de la taille du tableau. Merci pour votre suggestion, mais ce n'est pas le problème. Mon exemple est sorti de son contexte et réécrit pour faciliter la compréhension. :) – Michael
@litb: _const_ char names [] [20] n'entraîne aucune relocalisation des données et permet donc aux données de vivre en mémoire, comme les EPROM. OTHO, même _const_ char * names [] nécessite des relocations (c'est un tableau de pointeurs, et ces pointeurs doivent être déplacés): http://people.redhat.com/drepper/dsohowto.pdf –