CRTP가 많이 사용됩니까? 왜 그렇지 않은가? [닫은]


11

나는 호 기적으로 반복되는 템플릿 패턴 에 대해 생각하고 있습니다.

나는 그것이 매우 유용하다는 것을 알았고 많은 작업에 대해 꽤 잘 조정되었습니다. 그러나 나는 야생에서 CRTP 코드를 많이 보지 못한다는 것을 인정해야합니다.

파악하기가 어렵습니까? 가상 기능이 전반적으로 쉬워 집니까? 가상 키워드가 나타나는 경우의 90 %에 사용해서는 안됩니까?

답변:


8

간단한 사실은 대부분의 C ++ 사용자 vectormallocand 보다 나은 것을 거의 파악할 수 없기 free때문에 고급 템플릿 메타 프로그래밍을 이해하고 구현할 수있는 사람은 그리 많지 않다는 것 입니다. 이것은 사람들이 90 %의 상황에 좋더라도 사람들이 그것을 알지 못하거나 사용 방법을 알기 때문에 훨씬 더 적게 볼 수 있음을 의미합니다.

그러나, 가상 함수는 않습니다 즉, 가상 함수가 CRTP보다 훨씬 사용하기 쉽게, 장점이있다. C ++ 템플릿은 사실상 무엇이든 모든 것에 대해 나쁜 것으로 유명하며 포함 모델은 공을 빨아들입니다.

그러나 그것들은 [가상 기능]이 더 느리고 덜 강력합니다. 예를 들어, 현재 CRTP를 사용하여 코드를 작성하고 있습니다. 여기에서 표현식 템플릿과 함께 사용할 연산자 오버로드를 상속합니다. 가상 함수가 그 기능을 수행 할 수있는 방법은 없습니다.


1
CRTP가 '가상'의 사용을 피하기 위해 사용하는 언어 기능이 '가상'무엇이든 모든 것에 대해 아프다는 것이 다소 역설적이지 않습니까?
Kaiserludi

6

WTL 은 CRTP를 사용합니다. Chromium 브라우저는 WTL을 사용하는 잘 알려진 소프트웨어의 예입니다. 따라서 "실제로"사용되고 있습니다.

약 90 %? 그것은 분명히 과장된 진술입니다. 다형성 객체의 컨테이너를 사용한 적이 있습니까? 즉 다형성의 아주 일반적인 사용 그리고 있기 때문에 당신은 CRTP와 함께 할 수 없어 Base<DerivedA>동일하지 않습니다 Base<DerivedB>.


-5

더 널리 사용되지 않는 이유는 다음과 같습니다.

  1. 해킹이야
  2. 해킹으로 사용할 때 문제가 발생하지는 않습니다. 일반적인 OO 자료는 많은 프로젝트에서 사용되었으며 제대로 작동하는 것으로 나타났습니다 ./ 문제는 잘 알려져 있으며 CRTP는 소수의 프로젝트에서만 발견되며 데이터가 없습니다.
  3. 그것을 사용해야 할 이유가 없습니다-대부분의 이유는 사이트가 유효하지 않습니다
  4. 좀 더 복잡하게 만들 수 있습니다

11
가장 확실한 것은 아닙니다. 동작은 매우 잘 정의되어 있으며 많이 사용합니다.
DeadMG

5
그렇습니다. 전체 STL은 큰 해킹입니다.
Abyx

답을 편집하고 왜 해킹인지 설명 할 수 있습니까?
Nick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.