Рассмотрим следующий класс:
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_;
};
Также рассмотрим следующий массив данных char *:
char STUDENT_NAMES[][20] = {
"Bart",
"Liza",
"Maggie"
};
Теперь я хочу создать std :: список Person в соответствии с этим массивом.
Все, что я мог придумать, это использовать алгоритм std :: transform с рукописными
функциональный объект:
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() );
// ...
Есть ли более короткий и / или более понятный способ сделать это? Может быть, какой-то стандарт
функциональные объекты или адаптеры?