기본 클래스 방법을 호출하기 위해 간결한 (아직도 표현력이 있음) C ++ 구문
-
19-09-2019 - |
문제
기본 클래스 방법을 구체적으로 호출하고 싶습니다. 이것을하는 가장 간결한 방법은 무엇입니까? 예를 들어:
class Base
{
public:
bool operator != (Base&);
};
class Child : public Base
{
public:
bool operator != (Child& child_)
{
if(Base::operator!=(child_)) // Is there a more concise syntax than this?
return true;
// ... Some other comparisons that Base does not know about ...
return false;
}
};
해결책
아니, 그것은 간결한 것만 큼 간결합니다. Base::operator!=
메소드의 이름입니다.
그리고 네, 당신이하는 일은 표준입니다.
그러나 예제에서 (코드를 제거하지 않는 한) 필요하지 않습니다. Child::operator!=
조금도. 그것은 같은 일을합니다 Base::operator!=
할 것이다.
다른 팁
1
if ( *((Base*)this) != child_ ) return true;
2
if ( *(static_cast<Base*>(this)) != child_ ) return true;
3
class Base
{
public:
bool operator != (Base&);
Base & getBase() { return *this;}
Base const & getBase() const { return *this;}
};
if ( getBase() != child_ ) return true;
당신이하는 일은 가장 간결하고 "표준"방법이지만 어떤 사람들은 이것을 선호합니다.
class SomeBase
{
public:
bool operator!=(const SomeBaseClass& other);
};
class SomeObject: public SomeBase
{
typedef SomeBase base; // Define alias for base class
public:
bool operator!=(const SomeObject &other)
{
// Use alias
if (base::operator!=(other))
return true;
// ...
return false;
}
};
이 방법의 이점은 의도를 명확하게하고, 긴 기본 클래스 이름이 될 수있는 것에 대한 표준 약어를 제공하고, 기본 클래스가 변경되면 기본의 모든 사용을 변경할 필요는 없습니다.
보다 C ++에서 "Super"사용 추가 논의를 위해.
(개인적으로, 나는 이것을 신경 쓰지 않으며, 나는 그것을 추천하지 않지만, 그것이 질문에 대한 유효한 대답 중 하나라고 생각합니다.)
if (condition) return true;
return false;
약칭 할 수 있습니다
return condition;
IF/그런 다음 제어 구조를 제거하고 기본 클래스 연산자의 반환 값을 반환하지만 그렇지 않으면 당신이하고있는 일은 괜찮습니다.
그러나 조금 더 간결 할 수 있습니다. return ((Base&)*this) != child_;
제휴하지 않습니다 StackOverflow