pointer 사용법
2025년 10월 10일
멤버 포인터 #
데이터 멤버 포인터 #
1int Base::* bp = &Base::b0;
2Base* b = new Base();
3b->*bp; // 이렇게 접근하면 무조건 b0을 가리킴
bp는 Base의 int형 멤버를 담는 포인터라는 의미이고, b0이나 b1이나 뭐 어쨌든 Base의 int형 멤버라면 뭐든 담을 수 있다.
사실 객체가 있다면 b->b0 처럼 직접 접근할 수 있지만, 객체가 없는 경우엔 필드 선택자처럼 들고다닐 수 있다는 장점이 있다.
이런게 가능하다.. 같은 타입의 필드가 여러개 있다면 필드를 런타임에 결정하는 것이 가능해짐..
1int Base::* pick(const std::string& name) {
2 return name=="b0" ? &Base::b0 : &Base::b1;
3}
4Base x{1,2}; auto m = pick("b1");
5int v = x.*m; // x.b1