다음은 하나의 좋은 예제에서 약간 수정 된 코드입니다. 한 문자열의 벡터에서 다른 벡터의 벡터로 값을 복사하는 방법입니다. 나는 동적으로 할당 된 객체를 사용하고 있는데이 경우공유 포인터 벡터를 사용하여 람다를 향상 시키십시오
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using boost::shared_ptr;
using boost::make_shared;
using namespace boost::lambda;
class Object
{
public:
std::string Name;
Object(const std::string& Name_ = "")
: Name(Name_)
{
}
};
int main()
{
//std::vector<Object> objects(3, Object());
std::vector<shared_ptr<Object> > objects(3, make_shared<Object>());
std::vector<std::string> names;
names.push_back("Alpha");
names.push_back("Beta");
names.push_back("Gamma");
std::vector<std::string>::const_iterator names_it;
names_it = static_cast<const std::vector<std::string>&>(names).begin();
//std::for_each(objects.begin(), objects.end(), bind(&Object::Name, _1) = *var(names_it)++);
std::for_each(objects.begin(), objects.end(), bind(&Object::Name, *_1) = *var(names_it)++);
//std::vector<Object>::iterator it, end = objects.end();
std::vector<shared_ptr<Object> >::iterator it, end = objects.end();
for (it = objects.begin(); it != end; ++it) {
//std::cout << it->Name << std::endl;
std::cout << (*it)->Name << std::endl;
}
return EXIT_SUCCESS;
}
, 그리고 부스트 : : 람다 :: 바인드 부스트 :: 바인드 등의 변경을 처리 할 수 없기 때문에, 나는 역 참조 자리에 필요합니까 : (another copy algorithm 참조) 위해 컴파일 :
std::for_each(objects.begin(), objects.end(), bind(&Object::Name, *_1) = *var(names_it)++);
하지만 출력에서 내가있어이 :
Gamma
Gamma
Gamma
당신의 설명은 무엇입니까?
[Boost.Phoenix v3] (http://www.boost.org/libs/phoenix/)의 최신 버전에서는 Boost.Lambda가 공식적으로 더 이상 사용되지 않습니다. 새로운 코드 대신 Phoenix를 사용하십시오. : -] – ildjarn