【发布时间】:2010-11-10 06:40:11
【问题描述】:
考虑以下类:
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::list。 我所能发明的就是使用手写的 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() );
// ...
是否有任何更短和/或更清晰的方法来做到这一点?也许有些标准 函数对象还是适配器?
【问题讨论】:
标签: c++ stl functional-programming