해결된 질문
작성
·
1.2K
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
즉 어떤 타입의 포인터라도, 변환이 일어난다면 해당 연산자로 타고 가겠죠.
아 넵 설명과 링크 감사합니다!!! ^^
참고하여 이해할 수 있도록 하겠습니다.