LLVM은 내장 된 RTTI보다 속도가 향상되고 vtable (dyn_cast
)이없는 클래스에 동적으로 캐스팅 할 수 있도록 RTTI의 대안으로 채택되었습니다. 그러나 더 많은 클래스와 함께 사용할 수는 있지만 정확히 dynamic_cast<>
이 사용 된 것과 똑같이 사용할 수 있습니다.LLVM은 동적 캐스트를 피하는 규칙에 대한 예외입니까?
dyn_cast<>
template documentation
LLVM은 평판 C++ 프로젝트는 그래서이 너무 많은 동적 캐스트는 또한 코드 냄새로 알려진 나쁜 디자인의 상징이라고 말하는 공통의 얼굴에 비행하는 것입니다. 확실히 더 나은 다이나믹 캐스트는 표준 디자인 인 dynamic_cast
보다 디자인 용도를 향상시키는 데 아무런 도움이되지 않습니다. 그럼 누가 여기 있니? 다이나믹 캐스팅의 대규모 사용이 C++ 코드에서 좋은 설계 선택 인 경우가 있습니까? Google은 LLVM 트렁크 소스 코드에서 이러한 종류의 동적 캐스팅을 690 번 나타냅니다.
Uses of dyn_cast<>
in LLVM trunk
간단히 말해서 "때로는 대규모 소프트웨어 프로젝트에서 규칙 중 일부를 구부리라고해야합니다"라고 생각합니다. 아니면 "컴파일러 또는 컴파일러 관련 프레임 워크가 일반적으로 나쁜 생각 인 저수준의 속임수로 해결해야합니다." 그렇다고해서 일반적인 'dynamic_cast' * 사용에 관해 결론을 내릴 수는 없습니다. * – jalf
이것은'규칙 '을 완전히 무시한 것 같습니다. 나는 규칙을 굽히는 690 사건을 부르지 않을 것이다.필자는 디자인 신념을 깨뜨리는 것이 허용된다는 것을 의미하는 컴파일러 나 컴파일러 관련 프레임 워크에 특별한 것을 보지 못했다. 여기에있는 동적 캐스팅은 컴파일러의 출력 코드 또는 입력 코드에 아무런 영향을 미치지 않습니다. 이는 단순히 디자인의 일부입니다. 필자는 충분히 크거나 복잡한 소프트웨어가 디자인 룰을 무시할 수 있다는 주장을 계속할 수 있습니다.이 규칙은 'dynamic_cast'를 피하기 위해 이런 종류의 디자인 조언에 심각하게 의문을 제기합니다. –