동적/정적 다형성은 애플리케이션 설계 및 요구 사항에 따라 달라진다는 것을 알고 있습니다. 그러나 가능하다면 항상 정적 인 다형성을 동적으로 선택하는 것이 좋습니다?Dyamic 대 C++의 정적 다형성 : 어느 것이 더 좋습니까?
하는 CRTP를 사용하여 정적 다형성을 구현 : 특히, 나는에 대해 조언을하는 것 둘, 내 응용 프로그램에 다음이 디자인 선택을 볼 수있는 vtable을 조회 오버 헤드를 여전히 템플릿 형태의 인터페이스를 제공하면서 기본 클래스. 그러나, 유해
동적 다형성이고 올바른 클래스/방법 액세스로 전환 static_cast 많이 사용 접근/변경자 추천에도 단순 기능 룩업 선정 연관, 인터페이스 (순수 가상 클래스)를 구현을
내 응용 프로그램은 매우 시간이 중요하므로 정적 다형성을 선호합니다. 그러나 너무 많은 static_cast를 사용하면 디자인이 좋지 않다는 것을 알 수 있어야하고 대기 시간을 발생시키지 않고이를 방지하는 방법을 알아야합니다.
편집 : 통찰력에 감사드립니다. 구체적인 경우를 생각해보십시오. 이들 중 어느 것이 더 나은 접근 방법입니까?
class IMessage_Type_1
{
virtual long getQuantity() =0;
...
}
class Message_Type_1_Impl: public IMessage_Type_1
{
long getQuantity() { return _qty;}
...
}
또는
이 각 클래스의 여러 뮤 테이터/접근이, 나는 내 응용 프로그램의 인터페이스를 지정해야 않는 것이template <class T>
class TMessage_Type_1
{
long getQuantity() { return static_cast<T*>(this)->getQuantity(); }
...
}
class Message_Type_1_Impl: public TMessage_Type_1<Message_Type_1_Impl>
{
long getQuantity() { return _qty; }
...
}
참고. 정적 다형성에서는 메시지 유형을 얻기 위해 한 번만 전환합니다. 그러나 동적 다형성에서는 각 메소드 호출에 가상 함수를 사용하고 있습니다. 정적 폴리를 사용하는 경우가 아닙니까? 나는 CRTP의 static_cast가 꽤 안전하고 성능상의 불이익 (컴파일 타임 바운드)이 없다고 믿는다.
스위치 케이스 구조는 vtable을 사용하는 것과 동일한 복잡성을 갖습니다. – user877329
정적 인 다형성을 사용할 때 왜 static_cast 및 스위치로 끝날 것이라고 생각하는지 모르겠습니다. 몇 가지 예제 코드를 보여줄 수 있습니까? –
@MichaelAnderson : 동적 다형성을 필요로하는 상황에서 정적 다형성을 사용하려고하면이 문제가 발생합니다. 이 경우 역동적 인 다형성을 재발 명하기보다는 사용하는 것이 거의 확실합니다. –