[%]
LLVM 소스코드 어질어질하다
익명(222.164)
2021-04-28 18:56
추천 0
LLVM 은 자료구조 어떻게 구현하는지 찾고 있다
libcxx/forward_list at master · llvm-mirror/libcxx (github.com)
이게 forward_list 구현인데
노드는 이러함 libcxx/forward_list at master · llvm-mirror/libcxx (github.com)
template <class _Tp, class _VoidPtr>
struct _LIBCPP_HIDDEN __begin_node_of
{
typedef __forward_begin_node
<
typename __rebind_pointer
<_VoidPtr
, __forward_list_node
<_Tp
, _VoidPtr
> >::type
> type
;
};
template <class _Tp, class _VoidPtr>
struct __forward_list_node
: public __begin_node_of
<_Tp
, _VoidPtr
>::type
{
typedef _Tp value_type
;
value_type __value_
;
};
이게 뭐지?
__forward_list_node 가 __begin_node_of::type 을 상속하는데 왜 __begin_node_of::type 이 __forward_list_node 를 쓰지?
어째서 template 에서 재귀가 허용되고 어떻게 작동하는지 도저히 이해가 안 간다
요 며칠 간 대가리 제대로 깨지는 중
이런 거 볼 때마다 Mozilla 사옥 방향으로 큰 절하고 싶어짐
모질라는 왜?
-러-를 만들어줘서
ㄹㅇ
진짜 나도 clang 코드 보다가 아.. 막막한데를 느낀게 진짜 오랜만이었음 앵간한 코드는 다 읽히는데
아까 누가 CRTP 라고 댓 달았는데 그거 맞는 거 같다. 하도 꼬아놔서 그걸 염두에 두지 못했다
CRTP 가 아니라 template specialization 를 하나의 signature 로 봐야 할 것 같다. 내가 생각하기엔 overload resolution 이 끝나고 나서야 클래스가 정해지기 때문에 저게 가능하다고 생각한다