2012-07-15 5 views
0

상속 계층 중 하나에 중복 된 코드로 인해 어려움을 겪고 있습니다. function smile() 함수 내에서 코드가 중복되지 않도록하려면 어떻게해야합니까?C++에서 상속 계층 구조에 코드 중복 방지

변수 _a이 기본 클래스에 존재하지 않는다는 사실을 감안할 때 거기에서 함수를 이동할 수 없습니다. 또한 template<typename T> void smile(T& a) { a++; }과 같은 템플릿 함수를 만드는 것은 실제로 나에게 해결책이 아닙니다. 내 실제 코드는 좀 더 복잡하고 현재의 디자인을 적용하는 것은 불가능하지는 않지만 그러한 솔루션은 매우 지저분 할 것입니다.

또한 누구나 OOP 및 템플릿 원칙을 사용하여 실제로 C++에서 코드를 디자인하는 방법을 가르치는 훌륭한 책을 알고 있습니까?

+3

너의 본보기. –

+1

실제 상황의 어떤면에서 템플릿이 유효한 옵션이 아닌지 확인하는 것은 흥미로운 일입니다. –

+0

@ VaughnCato가 말했듯이, Template는 smile()의 중복 구현을 피하기에 충분할 것입니다. 하지만 할 수 없다면 다중 상속에 대해 고려하지 않으시겠습니까? 적절한 제한이 있으면 좋을 수도 있습니다. – dgregory

답변

1

당신은 다른 도우미 템플릿에서 상속 할 수 있습니다 :

template <typename T, typename Derived> struct filler 
{ 
    T _a; 
    void fill() 
    { 
     com & b = static_cast<Derived&>(*this); 
     _a = std::min(b._x, b._y); 
    } 
}; 

사용법 :

귀하의 예를 정말에 대한 올바른 해답이 될 것입니다 템플릿을 사용하기 때문에, 다음 질문을 설명하지 않는 것
struct com_int : com, filler<int, com_int> { };