구조체에다가 PhantomData<fn() -> T> 이렇게 박아놓은거 무슨 용도임? 저거 만들어놓고 막상 접근하지는 않던데 왜 만드는거임?
[질문] Rust에서 PhantomData가 무슨 용도인지 궁금
익명(1.239)
2020-02-18 18:06
추천 0
댓글 17
다른 게시글
-
trailing comma 지원 안하는 언어/포맷은 암걸림 [3][%] ㅇㄹ(rerereq) | 20.02.18추천 1
-
emacs 장점 [2][%] ㅇㄹ(rerereq) | 20.02.18추천 1
-
이맥스 씹덕 새끼들 들어와라 [5][%] 익명(104.238) | 20.02.18추천 0
-
이맥스 개종 가이드로 이맥스 신자가 됐습니다 [4][%] 익명(121.183) | 20.02.18추천 0
-
java 동기화 씹고수있누? [12][%] 익명(112.221) | 20.02.18추천 0
-
예전에 보안 회사 인턴할때 다렉 만졌는데 [6][%] 닷넷좋아함(dotnetlove) | 20.02.18추천 0
-
이거 왜 Dead code라고 뜨는것? [13][%] 말랑소녀(aikotakamori) | 20.02.18추천 0
-
그래픽스 조아하면 vr하자 [1][%] 익명(59.24) | 20.02.18추천 0
-
vulkan 다운그레이드 삽질[%] 약팔이(1.237) | 20.02.18추천 0
-
opengl 공부를 시작하려는데 [10][%] 익명(59.6) | 20.02.18추천 0
타입지정용임 내부에 라이프타임 없는 애들인데 구조체는 라이프타임있어야할 때 팬톰 박기 등
저거 하나만 써주면 구조체 라이프타임이 보장되는거임? 누가 말하기론 소유권 문제라고 하는거 같던데
아 설마 구조체 수명 명시하는걸 모든 멤버 변수랑 관련된 다른 변수들에 지정하는게 귀찮아서 팬텀 하나 박는거로 해결하는거임?
구조체는 제네릭 인자를 무조건 써야하는데 어떤 타입은 인자를 안쓰고 달고만 있고 싶어함 그럴때 PhantomData라는 마커타입을 쓰는것
모든 타입에 사용되지 않는 제네릭 인자를 허용하기 vs 특정 타입만 명시적으로 마커달기에서 후자를 택한것
윗댓처럼 수명잡아놓는데도 쓰고 복잡한 trait 구현시킬때도 가끔 필요함
왜 그런짓을 해야하는거야? 제네릭 인자를 왜 달아놓고 안쓰는거임? rust-analyzer 코드에 그 부분이 있더라고
제네릭 인자가 필요하지 않다면 그냥 안쓰면 되는거 아님???? 그리고 구조체 수명은 그 구조체를 누가 소유하고 있는지를 신경써야 하는거 아냐?
일단 수명이 필요한 경우랑 본문처럼 타입이 필요한 경우가 있음
수명은 일단 넘어가고 타입만 말해보면 구조체의 필드가 T가 전혀 쓰이지 않는데 다른 impl 블록에서 T가 필요한 경우가 있음
이 댓글은 게시물 작성자가 삭제하였습니다.
그러면 PhantomData<T>라고만 하면 되는거 아냐? 왜 fn() -> T인거지?
그건 케바케임 그 T를 제네릭 인자로 가지는 trait를 구현할수도 있고 T가 특정 trait를 구현해서 인스턴스없이 정적함수만 갖다 쓸수도있고
그건 국룰이 있음 수명이 필요할땐 &'a ()를 쓰고 타입이 필요할땐 T를 쓰는데 fn() -> T는 리턴타입을 표현하는거임 아마 그 구조체가 타입이 지워진 무슨 함수 비슷한걸 들고있겠지
아직도 이해가 잘 안된다.... 되게 복잡한 상황에서 쓴다는것만 알겠네
ㅇㅇ 보통 수명이 필요한건 unsafe랑 연관되고 타입이 필요한건 복잡한 제네릭이랑 연관돼서 일반적으로 쓸일은 읍다
구체적으로 알고 싶은데 코드를 가지고 글 다시 써볼게