• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

operator질문드립니다

22.03.26 12:23 작성 조회수 273

0

class NullPtr
{
public:
    template<typename T>
    // #1
    operator T* () const
    {
        return 0;
    }
    // #2
    template<typename C, typename T>
    operator T C::* () const
    {
        return 0;
    }
    
private:
    // #3
    void operator&() const;
};

 

 

nullptr보다 operator로 구현하는 부분이 궁금해서 질문 드립니다.

1) 코드에서 #1과 #2에 operator선언시 operator앞에 return 타입을 따로 지정하지 않았는데도 오류가 발생하지 않는 데 operator의 return값은 항상 명시하지 않아도 되나요?

 

2) #2에서 선언한 operator가 이해가 잘 안되는데 C라는 클래스의 멤버함수 포인터를 T라는 타입으로 받아준다(?)라고 하셨는데 그럼 이건 operator를 선언할때  선언부의 해석을 어떤순서로 해야 하는건가요? C::*타입을 T로 typedef한것과 같은 의미로 봐야 하는걸까요? operator를 해석할때마다 정확한 기준이 잡혀있지 않아 항상 혼돈이 옵니다 ㅠㅠ

 

3) #3에서는 operator의 리턴 타입이 void로 명시되어 있습니다. #1과 #2와는 다르게 operator앖에 리턴 타입이 명시된 경우는 어떤 경우인가요? void를 빼면 build error가 발생하는데 #1과 #2와 어떤 차이가 있는지 궁금합니다.

 

답변 1

답변을 작성해보세요.

0

operator의 문제가 아니고 template<T>으로 만들 경우
실제로 사용하기 전까지는 코드가 만들어지지 않습니다.
그래서 아무 문제 없이 빌드가 통과되는 것이죠.

문법은 이론으로 알기 보다 다양한 실험을 해야 오래 남습니다.
2번은  breakpoint를 걸고 이런 저런 실험을 해보시기 바랍니다.