Mic*_*ael 2 c++ functional-programming 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_;
};
Run Code Online (Sandbox Code Playgroud)
还要考虑以下char*数据数组:
char STUDENT_NAMES[][20] = {
"Bart",
"Liza",
"Maggie"
};
Run Code Online (Sandbox Code Playgroud)
现在,我想根据这个数组创建std :: Person of 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() );
// ...
Run Code Online (Sandbox Code Playgroud)
有没有更简短和/或更清晰的方法呢?也许一些标准的功能对象或适配器?
您可以通过boost::lambda以下方式使用:
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/construct.hpp>
#include <string>
#include <iterator>
#include <algorithm>
#include <list>
struct person {
explicit person(char const *name)
:name(name) { }
private:
std::string name;
};
int main() {
char names[][20] = {
"Michael", "litb"
};
std::list<person> v;
std::transform(names, names + 2, std::front_inserter(v),
boost::lambda::constructor<person>());
}
Run Code Online (Sandbox Code Playgroud)
我不认为标准C++库有这样的方法.
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |