die folgende Klasse:Gibt es ein Funktionsobjekt zum Erstellen von Objekten in AWL? Betrachten
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_;
};
Sehen Sie sich auch folgende Array von char * Daten:
char STUDENT_NAMES[][20] = {
"Bart",
"Liza",
"Maggie"
};
Jetzt will ich std :: Liste der Person erstellen nach diesem Array. Alles, was ich erfinden könnte, ist std verwenden :: Transformationsalgorithmus mit handgeschriebenem Funktionsobjekt:
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());
// ...
Gibt es eine kürzer und/oder klare Weise es zu tun? Vielleicht einige Standard Funktionsobjekte oder Adapter?
Ich hoffe, dass dieses Array calcs jetzt sind endlich. Ignoriere meinen Blödsinn erwähnt, was ich in meiner Antwort vorübergehend hatte, was zu welchem Typ führt. Srsly, Array hax am Morgen verletzt mein Gehirn :) Allerdings empfehle ich immer noch, 'STUDENT_NAMES' ein' char const * Namen [] = {"Bart", "Lisa", ...}; '- so zu machen es kann nicht mehr über die Grenze von 20 Zeichen hinauslaufen. Ich kenne Ihre Code-Basis jedoch nicht. Gab es einen guten Grund, dass du es so machst? –
Ihre Lösung sieht gut aus, danke! Über die Array-Größe. Danke für Ihren Vorschlag, aber es ist nicht der Punkt des Problems. Mein Beispiel wird aus dem Zusammenhang genommen und zum leichteren Verständnis neu geschrieben. :) – Michael
@litb: _const_ char Namen [] [20] führt zu keinen Verlagerungen für die Daten und damit ermöglicht die Daten in Nur-Lese-Speicher, wie EPROMs leben. OTHO, selbst _const_ char * Namen [] benötigt Umzüge (es ist ein Array von Zeigern, und diese Zeiger müssen verlagert werden): http://people.redhat.com/drepper/dsohowto.pdf –