• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

nullptr 자체 구현 과정에 대하여 질문이 있습니다.

23.03.20 15:47 작성 조회수 1.13k

1

안녕하세요.

nullptr 수업 중 알려주신

"nullptr 자체 구현 과정"에 대하여 질문이 있습니다.

#include <iostream>
using namespace std;
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
#include <algorithm>

void Test(void* ptr)
{
	cout << "Test(*)" << endl;
}

class NullPrt
{
public:
	// 그 어떤 타입의 포인터와도 치환 가능
	template<typename T>
	operator T* ()const
	{
		return 0;
	}

	// 그 어떤 타입의 멤버 포인터와도 치환 가능
	template<typename C, typename T>
	operator T C::* () const
	{
		return 0;
	}
private:
	void operator&() const;  // 주소값 &을 막는다.
};

const NullPrt _NullPtr;

int main()
{

	Test(_NullPtr);

	return 0;
}

위와 같은 코드에서

	Test(_NullPtr);

를 실행하면,

왜 NullPtr의

	template<typename T>
        operator T* ()const
	{
		return 0;
	}

로 진입하는 지에 대하여 조금만 더 자세히 설명해주실 수있을까요?

Test 함수로 _NullPtr 객체를 보내주는데,

왜 operator T* () const로 진입하지는 약간 이해가 되지 않습니다.

 

혹시 관련하여 참고할만한 구글링 키워드를 알려주셔도 좋습니다. ^^

항상 잘 배우고 있습니다.

감사합니다.

답변 1

답변을 작성해보세요.

2

잘 안 쓰이지만, Conversion Operator를 template으로 만든 것입니다.
https://en.cppreference.com/w/cpp/language/cast_operator

즉 어떤 타입의 포인터라도, 변환이 일어난다면 해당 연산자로 타고 가겠죠.

JDY님의 프로필

JDY

질문자

2023.03.20

아 넵 설명과 링크 감사합니다!!! ^^

참고하여 이해할 수 있도록 하겠습니다.