2013-07-09 6 views
0

속성에 따라 사용자 정의 유형에 대한 포인터로 구성된 벡터를 검색하려고합니다. 하지만 람다를 올바르게 정의하는 방법을 알지 못합니다. 여기 내 코드가있다.사용자 정의 유형에 대한 포인터 벡터를 검색하는 람다 정의

template<typename T> 
class State { 
public: 
    unsigned int id; 
    ... 
}; 

그리고 국가 포인터의 벡터를 잡고 다른 클래스 :

class System { 
public: 
    std::vector<State<type>*> list_; 
    State<type>* getState(unsigned int id) { 
    auto it = find_if(list_.begin(), list_.end(), [id](const State<type>* st&) {st->id == id;}); 
    if (it == list_.end()) 
     return nullptr; 
    return *it; 
    } 
... 
}; 

하지만 람다 (고화질)에서 참조와 포인터를 사용하여 섞는다. list_state이 포함되어 있는지 확인하는 올바른 방법은 무엇입니까? id?

도움 주셔서 감사합니다.

감사합니다, 앰퍼샌드는 매개 변수의 이름 앞에 있어야합니다 시작하려면

+0

람다 값을 실제로 돌려 주면 도움이 될 수 있습니다. –

답변

0

을 : const State<type>*& st. 이는 st을 상수 State<type>에 대한 포인터에 대한 참조로 선언합니다.

또한 실제로 return 람다에서 가져온 것이 있습니다.

괜찮은 것처럼 보이지만, 포인터를 사용하지 않거나 적어도 std::shared_ptr과 같은 스마트 포인터를 사용하는 것이 좋습니다.

+0

이 작동하면, '자동 it = find_if (list_.begin(), list_.end(), [id] (const 상태 * & st) {return (st-> id == id);} ;' – user1801173

관련 문제