어제 제가이 질문을했고 "juanchopanza"가 내 질문에 대답했지만 불행히도 제한된 유형 중 하나를 발견하지 못했습니다. "방문자"를 사용하는 것이 더욱 강력하기 때문에 누구나 "방문자"를 사용하여 해결책을 줄 수 있을지 궁금합니다. 나는이 벡터를 호출 할 때변형의 벡터에서 apply_visitor를 사용하여
boost::variant<T1*, T2, T3> Var;
std::vector<Var> Vec;
만 T2 경계 유형을 필터링하는 가장 좋은 방법은 무엇입니까 : 나는 다음과 같이 정의 된 부스트 변형의 벡터를 필터링하는 가장 좋은 방법을 찾고 있어요
새 벡터에 삽입 하시겠습니까? 또는 다른 방법으로,이
std::vector<T2> T2Vec =
(apply_visitor를 사용하여 VEC에서 필터링하는 방법) ...
감사 같은 것을 다시 싶어!
편집 : @ 영원히으로 sulotion :
template<typename T>
struct T_visitor : public boost::static_visitor<>
{
T_visitor(std::vector<T>& v) : vec(v) {}
template<typename U>
void operator() (const U&) {}
void operator() (const T& value)
{
vec.push_back(value);
}
private:
std::vector<T>& vec;
};
과 :
std::vector<T1> t1vec;
T_visitor<T1> vis(t1vec);
std::for_each(vec.begin(), vec.end(), boost::apply_visitor(vis));
여기에 문제가 있는지 말해 주시겠습니까?
'T_visitor vis (t1vec);'여기 템플릿 인수가 없습니다. –
@juanchopanza이 방문자는 어떻게 새 메시지를 메모리에있는 개체의 주소가 포함되어 있거나 포인터의 벡터가 이러한 개체를 가리 키도록 변경할 수 있습니까? –
'std :: vector'다음에'vec.push_back (& value)'을 사용할 수는 있지만주의 할 점은 벡터 재배치가 벡터 요소에 대한 포인터 또는 반복자를 유효하지 않게 만들 수 있다는 것입니다. –
juanchopanza