내가 가지고있는 다음과 같은 두 개의 클래스 : 나는 정수에 대한 참조로 두 번째의 필드 ref
척는 :: 변형을 높이고, 함께 참조 필드 유형
struct A {
A() : state(0) { }
A(int state_arg)
: state{ state_arg } { }
int state;
};
struct B {
B(int state_arg, const int& ref)
: state{ state_arg }, ref{ ref } { }
int state;
const int& ref;
};
다른 위치에서 B
의 일부 인스턴스 state
필드 (아마도 필요하지는 않음).
이제 이러한 유형에 대해 몇 가지 작업을 수행하려고합니다. 실제로 boost :: variant 라이브러리를 사용합니다.
using my_type = boost::variant<A, B>;
이제 my_type
의 변수를 사용할 때 모두 예상대로 작동합니다. 예를 들면 :
int main() {
my_type a(A(45));
my_type b(B(45, boost::get<A>(a).state));
A& at = boost::get<A>(a);
B& bt = boost::get<B>(b);
if (at.state == bt.ref) {
std::cout << "AS EXPECTED" << std::endl;
}
// that prints "AS EXPECTED"
}
하지만이 std::vector
my_type
의 작업을 할 때 일이 잘못!
int main() {
std::vector<my_type> vec;
vec.push_back(A(45));
vec.push_back(B(45, boost::get<A>(vec[0]).state));
A& at = boost::get<A>(vec[0]);
B& bt = boost::get<B>(vec[1]);
if (at.state == bt.ref) {
std::cout << "SHOULD I EXPECTED THIS ?" << std::endl;
}
// the code doesn't print
}
지금, 나는 여기에 무슨 일이 일어나고 있는지 알고 싶은, 즉 그 위의 코드에 조건 평가가 거짓주는 경우 것으로 발생하는 어떤 ?
가능합니다.이 작업을 수행하는 방법에 대한 조언을 받고 싶습니다. 미리 감사드립니다.
두 번째'push_back'는'에 전달 된 것을 포함하여, 벡터의 요소로 기존의 모든 참조를 무효화, 재 할당이 발생 B의 생성자. –