저는 트리 구조의 일종을 구현하는 C++의 인터페이스 (추상 클래스)를 설계하고 있습니다. 각 인스턴스에는 0 개, 1 개 이상의 자식이 있습니다. 아이는 인터페이스의 인스턴스이기도합니다.추상 클래스 컬렉션에 대한 액세스 제공
저는 일반적으로 특정 구현을 제외하지 않기 위해 인터페이스에 꽤 많은 생각을했습니다. 예를 들어, 메소드는 값을 어딘가에 저장하도록 구현 된 것처럼 참조를 리턴해서는 안됩니다. 이는 각 호출에서 값을 다시 계산하는 구현을 제외합니다. 또는 어떤 식 으로든 반환 된 값을 변환하는 래퍼.
그러나이 인터페이스를 사용하여 인스턴스의 하위 항목에 액세스하는 가장 좋은 방법은 확실하지 않습니다. 지금까지, 나는 두 가지 옵션을 마련했습니다
class Interface
{
public:
virtual ~Interface() = default;
// IDEA 1: return a collection of references.
virtual auto getChildren() const -> std::vector<std::reference_wrapper<Interface>> = 0;
// IDEA 2: accept a visitor.
virtual void visitChildren(const std::function<void(Interface&)> &visitor) const = 0;
};
내 질문 : 추상 클래스의 컬렉션에 대한 액세스를 제공하는 가장 좋은 * 방법은 무엇인지. 다른 아이디어와 접근 방식을 매우 높이 평가합니다 (예 : 가능한 경우 반복기 기반 접근 방식).
* 다음과 같은 속성의 일부 또는 모든 : ... 당신의 디자인은 옆으로 너무 자바와 같은 존재의 논의를 배치
은 당신이 반복자 들어 본 적이 :
전체 반복자 프로토콜을 공급 후,
Interface&
는 관용적 C++ 코드에서 사용할 수 있습니까? 그것은 C++의 지배적 인 관용구입니다. 표준 라이브러리를 살펴보십시오. – StoryTeller@StoryTeller 여기에서 반복기를 어떻게 사용하는지 예제를 제공해 주실 수 있습니까? ('begin'과'end' 함수도 순수 가상이어야합니다)? 아니면 반복자 접근 방식을 잘못 생각하고 있습니까? –
공동 변형 리 턴 유형을 생각하십시오 (다소). 추상 반복자에 대한 핸들을 반환합니다. 'begin'과'end'는 물론 가상 일 것입니다. – StoryTeller