나는 파생 클래스 자체 인 계층 구조에서 요소의 루트를 가져 오는 두 가지 설계에 직면하고 있습니다. 호기심과 마찬가지로 가장 우아함이 가장 효율적 인지도 궁금합니다. else가있는 경우 루트를 얻기 위해 가상 함수를 사용하는 대신if/else vs virtual function : 디자인 성능
class Element
{
public:
Root* root()
{
if(mParent)
return mParent->root();
else
return static_cast<Root*>(this);
}
protected:
Element* mParent;
};
class Root : public Element
{};
그리고 여기에 더 우아한 : 다음은 덜 우아한 버전입니다.
class Element
{
public:
virtual Root* root() { return mParent->root(); }
protected:
Element* mParent;
};
class Root : public Element
{
public:
virtual Root* root() { return this; }
};
그 것 제가 조기에 성능에 대해 걱정하지 말아야 알고, 난 이미 두 번째 옵션을 선택했다,하지만 난 어떤 요인이 있는지 알고 (캐시 미스가?), 이론적 인 수준에서 궁금 기능이 요소에 의해 매우 자주 호출되는 상황에서 한 접근법을 다른 접근법보다 우월하게 만드십시오.
참고 : 계층 구조가 5 ~ 20 개 요소의 순서로 정보를 추가하면이 질문이 너무 광범위하다고 생각하지 않습니다. 사실 꽤 실용적인 질문입니다.
두 가지 방법으로 프로그램 실행을 측정해야합니다. –
@NOvember 내가 먼저 말할 수있게 해주세요 : _yikes_. 부모 클래스를 하위 클래스처럼 취급하는 것이 좋은 생각 인 상황을 이해하도록 도와 줄 수 있습니까? 부모 클래스를 부모 클래스로 취급하지 않으면 왜 부모 함수 만 호출할까요? –
투표가 "너무 광범위하다"고 투표했습니다. 저는 이것에 대해 박사 학위 논문을 쓸 수 있다고 믿습니다. –