enable_shared_from_this

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

enable_shared_from_this

Post by 비회원 »

class Base : public enable_shared_from_this<Base>
{
..
boost::shared_ptr<Base> ReturnMyself()
{
return shared_from_this();
}
};

이런식으로 자신의 shared_ptr형을 반환할 수 있지 않습니까?

Base를 상속받는 Derived클래스내의 함수내에서

void Derived::SomeFunc()
{
boost::shared_ptr<Derived> derived_ptr;
derived_ptr = ReturnMyself();
..
..
};

여기서 ReturnMyself()를 통해서 반환되는 형식이 당연하지만 shared_ptr<Base>가 아닙니까?
shared_ptr<Derived>형식을 받을려고 여러모로 시도해봤지만 안됩니다
쉽게 말해서 Base를 상속받는 클래스에서 ReturnMyself를 호출하면 부모의 shared_ptr가 반환되는 것이 아니고, 자기 자신의 형식으로 반환되게 하고 싶습니다
좋은 방법 없을까요?
엉클뻐커
Posts: 194
Joined: 2001-10-22 09:00
Location: 30대후반 고졸 백수

Post by 엉클뻐커 »

static_pointer_cast 로 다운캐스트 할 수 있습니다.
neec
Posts: 38
Joined: 2001-08-06 09:00

Post by neec »

일전에 shared_ptr과 관련한 답변 내용에 해당 매크로를 남겼는데 검색해 보시지는 않았나 보군요.

boost::shared_dynamic_cast<파생클래스, 베이스클래스>(SharedPtr)
를 사용하셔야 하고 Base 클래스의 ReturnMyself()와 같은 메서드를 override하는 방법 보다는 Derived 클래스 선언시에 명시적으로 매크로 등을 사용하는 것이 유용할듯 싶네요.
From neec
엉클뻐커
Posts: 194
Joined: 2001-10-22 09:00
Location: 30대후반 고졸 백수

Post by 엉클뻐커 »

shared_dynamic_cast. shared_static_cast 와 같은역할의 함수가
TR1 에선 dynamic_pointer_cast, static_pointer_cast 가 될 모양입니다.
이미 부스트와 visual c++ feature pack 의 TR1 구현에도 포함되었습니다.
비회원

답변해주신 두분께 감사드립니다

Post by 비회원 »

감사합니다 (__)
Locked