템플릿 매개변수가 있는 컴파일러 버그 = void* - 페이지 20

 
pavlick_ :

가상 으로 w를 통한 램프 버튼:

해킹된 예.

이것은 다형성의 예가 아니며 패턴의 예도 아닙니다. 이것은 bool 변수를 사용하는 예일 뿐이고 다른 것은 사용하지 않습니다(두꺼운 껍질 층 제외).

템플릿은 어떤 식으로든 다형성 을 대체할 수 없습니다.

 
Dmitry Fedoseev :

템플릿은 어떤 식으로든 다형성 을 대체할 수 없습니다.

내가 어디 다른 말을 했습니까? 비결은 템플릿을 다형성으로 대체하려고 한다는 것입니다.

 
pavlick_ :

내가 어디 다른 말을 했습니까? 비결은 템플릿을 다형성으로 대체하려고 한다는 것입니다.

오히려 일반적인 OOP 접근 방식을 목발로 대체하려고 합니다. 템플릿은 기본적으로 저장된 데이터에만 필요합니다. 글쎄, IComparable<T>와 같은 일부 인터페이스에서

실제로는 성능상의 이점이 없습니다. 두 번째 예에서 컴파일러는 모든 것이 명확하기 때문에 모든 것을 인라인합니다.

 
Alexey Navoykov :

오히려 일반적인 OOP 접근 방식을 목발로 대체하려고 합니다. 템플릿은 기본적으로 저장된 데이터에만 필요합니다. 글쎄, IComparable<T>와 같은 일부 인터페이스에서

실제로는 성능상의 이점이 없습니다. 두 번째 예에서 컴파일러는 모든 것이 명확하기 때문에 모든 것을 인라인합니다.

이것은 내 예가 아니라 종속성 반전의 고전적인 예입니다. 단순성에 대해 불평하지 마십시오. 단지 아이디어를 보여줍니다. 제가 코드를 작성했다면 "글쎄요, 그건 완전히 다른 얘기입니다"라고 말하시겠습니까?

템플릿은 목발이되었습니다, 그렇습니다 .... 알겠습니다. 이것으로 끝내겠습니다.

 
그건 그렇고, 만약 우리가 void*로 돌아간다면, 나는 단지 dynamic_cast 가 그것으로 C ++에서 작동하지 않는다는 것을 깨달았습니다(컴파일하지 않습니다). 이것은 논리적입니다. 왜냐하면 우리는 메모리 영역에 대한 비개인적인 포인터를 가지고 있기 때문입니다. 따라서 명시적으로만 캐스팅할 수 있습니다. 따라서 어떤 유형이 있는지 정확히 알아야 합니다. 따라서 void* 자체는 C++에서 쓸모가 없습니다. 그러나 MQL에서는 모든 것이 다릅니다. 그러나 호환성을 위해 dynamic_cast 사용을 피하고 void* 유형 포인터로 삭제 해야 합니다.