2014-04-07 3 views
1

이것은 C++ 문제입니다. 특정 매개 변수에 따라 구현이 다른 두 개의 유틸리티 함수를 갖고 싶습니다. 런타임 중에이 매개 변수를 기반으로 호출해야하는 구현이 무엇인지, 메모리 사용 및 성능면에서 가장 좋은 설계는 무엇인지 결정됩니다. 우리는 두 가지 접근법을 생각하고 있지만 다음 중 하나에서 얻은 개선점을 확인할 수는 없습니다. -이 두 유틸리티 함수에 대한 인터페이스를 정의하고이를 확장하는 여러 클래스가있는 경우이 클래스 구현의 인스턴스가있는 맵을 생성합니다 (eager initialising) - 하나의 클래스에서 모든 함수를 정적 함수로 정의하고 함수 포인터를 사용하여 호출하십시오.클래스 인스턴스 포인터 또는 함수 포인터?

+1

기본 인터페이스 사용 사례처럼 들립니다. 필요한 함수로 기본 인터페이스를 만든 다음이 함수를 구현하는 두 개의 클래스를 만듭니다. – andre

+0

귀하의 질문은 구문 분석하기가 매우 어렵지만 상속 및 가상 메소드가 필요합니다. – Massa

+0

매개 변수를 기반으로하는 간단한 스위치/사례, 다음에 의해 인덱싱 된 함수 포인터가 실제로 구현되었습니다 (적어도). 매개 변수 (유효한 매개 변수 확인), 맵을 사용하여 팩토리에서 가져온 스위치/케이스 또는 다형 클래스를 통해 팩토리 메소드에서 얻은 다형 클래스. 성능이 중요한 경우 첫 번째 방법이 가장 빠른 경우가있을 수 있습니다. – stefaanv

답변

2

가상 상속은 일반적으로 함수 포인터를 사용하여 구현되므로 두 아이디어가 모두 컴파일러 관점에서 똑같습니다.

두 번째 생각에, 당신은 함수 호출만큼 기본 성능을 고려하고 있습니다. 병목 현상이되는 부분을 100 % 확신하고 있습니까? 최적화 할 때 sidetracked하고 성능에 0 % 또는 1 %의 영향을주는 것을 사용하는 것은 매우 쉽습니다. 그래서 황금률에 충실하십시오 : 어떤 부분이 정말로 당신을 늦추는 지 증명하십시오. 테스트를 작성하면 두 솔루션을 모두 테스트하고 어느 것이 더 빠른 결과를 얻는 것이 쉽습니다.