기존 인스턴스를 기반으로 클래스의 새 인스턴스 만들기

SigGP

나는 다양한 종류의 동물을 나타내는 많은 클래스가 있습니다. 아이디어는 같은 종의 두 동물이 만나면이 종의 새로운 동물이 만들어 져야한다는 것입니다. 이것은 제가이 상황에서 특정 클래스의 새로운 인텐스를 만들고 싶다는 것을 의미합니다. 곰이 만나면 새로운 곰 인스턴스를 만들고 싶습니다. 박쥐가 만날 때 새로운 박쥐 인스턴스를 만들고 싶습니다.

코드를 복제하지 않고 어떻게이 목표를 달성 할 수 있습니까? 각 클래스 (동물)에 대해 개별 if 조건을 만드는 것을 피하고 싶습니다. 기존 인스턴스의 클래스를 기반으로 클래스의 새 인스턴스가 자동으로 생성되는 솔루션을 찾고 있습니다.

쿠엔틴

두 부모 객체 동일한 유형을 가져야 한다는 것을 알고 있기 때문에 일반적인 이중 디스 패칭 솔루션이 필요하지 않습니다. 가능한 모든 조합을 처리하도록 만들어졌습니다.

복제 패턴의 약간 수정 된 변형을 사용하겠습니다. Animal, 기본 클래스는 순수 가상 복제 기능을 얻습니다.

struct Animal {
    virtual std::unique_ptr<Animal> mateWith(Animal const &other) const = 0;
};

그런 다음 모든 하위 클래스가이 메서드를 구현하여 RTTI를 통해 다른 Animal것이 실제로 올바른 유형인지 확인합니다.

struct Bear : Animal {
    std::unique_ptr<Animal> mateWith(Animal const &other) const override {
        auto &otherBear = dynamic_cast<Bear const &>(other);
        return std::make_unique<Bear>(*this, otherBear);
    }
};

std::bad_cast다른 동물이 곰이 아니면 던질 것 입니다. 이를 다른 오류 처리로 바꿀 수도 있습니다.

struct Bear : Animal {
    std::unique_ptr<Animal> mateWith(Animal const &other) const override {
        auto *otherBear = dynamic_cast<Bear const *>(&other);
        if(!otherBear) {
            // This is not a bear!
        }

        return std::make_unique<Bear>(*this, *otherBear);
    }
};

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

TypeScript : 클래스의 새 인스턴스 만들기

분류에서Dev

새로운 인스턴스 클래스 참조 만들기

분류에서Dev

기존 클래스의 새 인스턴스로 데이터 가져 오기

분류에서Dev

기존 클래스의 속성으로 새 클래스를 만들 때 파이썬은 어떻게 속성을 인스턴스화합니까?

분류에서Dev

abstact 기본 클래스에서 상속 된 클래스 인스턴스의 새 클래스 인스턴스 생성 / 리셋 클래스 인스턴스

분류에서Dev

새 변수를 만들지 않고 다른 파일에있는 클래스의 인스턴스 만들기

분류에서Dev

Google App Engine 서비스의 새 인스턴스 만들기

분류에서Dev

주어진 식별자를 기반으로 기본 클래스의 새 인스턴스를 만들 수 있습니까?

분류에서Dev

기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

분류에서Dev

기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

분류에서Dev

클래스의 인스턴스 찾기

분류에서Dev

Python에서 클래스의 여러 인스턴스 만들기

분류에서Dev

C # : 하위 클래스의 인스턴스 만들기

분류에서Dev

C # : 하위 클래스의 인스턴스 만들기

분류에서Dev

JNI-다른 C ++ 클래스의 인스턴스 만들기

분류에서Dev

TypeScript에서 Javascript 클래스의 인스턴스 만들기

분류에서Dev

Ruby 클래스 인스턴스 변수를 다른 클래스의 새 인스턴스로 초기화하는 방법은 무엇입니까?

분류에서Dev

다른 파일의 새 인스턴스 만들기

분류에서Dev

루프에서 JLabel 및 actionlistener의 새 인스턴스 만들기

분류에서Dev

다른 클래스의 멤버로 클래스 인스턴스 만들기

분류에서Dev

다른 클래스에서 한 클래스의 인스턴스 만들기

분류에서Dev

다른 클래스 내에서 클래스의 인스턴스 만들기

분류에서Dev

공유 포인터가 새 인스턴스를 가리 키도록 만들기

분류에서Dev

WF 서비스 4.5 상관 관계 : 새 인스턴스를 만들거나 기존

분류에서Dev

PHP의 매개 변수를 기반으로 클래스 인스턴스화

분류에서Dev

매개 변수에 따라 파생 클래스의 새 인스턴스 만들기

분류에서Dev

스택에 클래스 인스턴스 만들기

분류에서Dev

새 유형에 대한 인스턴스 만들기

분류에서Dev

각 인스턴스 Python에 대한 새 파일 만들기

Related 관련 기사

  1. 1

    TypeScript : 클래스의 새 인스턴스 만들기

  2. 2

    새로운 인스턴스 클래스 참조 만들기

  3. 3

    기존 클래스의 새 인스턴스로 데이터 가져 오기

  4. 4

    기존 클래스의 속성으로 새 클래스를 만들 때 파이썬은 어떻게 속성을 인스턴스화합니까?

  5. 5

    abstact 기본 클래스에서 상속 된 클래스 인스턴스의 새 클래스 인스턴스 생성 / 리셋 클래스 인스턴스

  6. 6

    새 변수를 만들지 않고 다른 파일에있는 클래스의 인스턴스 만들기

  7. 7

    Google App Engine 서비스의 새 인스턴스 만들기

  8. 8

    주어진 식별자를 기반으로 기본 클래스의 새 인스턴스를 만들 수 있습니까?

  9. 9

    기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

  10. 10

    기존 항목을 덮어 쓰지 않고 배열 내부에 새 클래스 인스턴스 만들기

  11. 11

    클래스의 인스턴스 찾기

  12. 12

    Python에서 클래스의 여러 인스턴스 만들기

  13. 13

    C # : 하위 클래스의 인스턴스 만들기

  14. 14

    C # : 하위 클래스의 인스턴스 만들기

  15. 15

    JNI-다른 C ++ 클래스의 인스턴스 만들기

  16. 16

    TypeScript에서 Javascript 클래스의 인스턴스 만들기

  17. 17

    Ruby 클래스 인스턴스 변수를 다른 클래스의 새 인스턴스로 초기화하는 방법은 무엇입니까?

  18. 18

    다른 파일의 새 인스턴스 만들기

  19. 19

    루프에서 JLabel 및 actionlistener의 새 인스턴스 만들기

  20. 20

    다른 클래스의 멤버로 클래스 인스턴스 만들기

  21. 21

    다른 클래스에서 한 클래스의 인스턴스 만들기

  22. 22

    다른 클래스 내에서 클래스의 인스턴스 만들기

  23. 23

    공유 포인터가 새 인스턴스를 가리 키도록 만들기

  24. 24

    WF 서비스 4.5 상관 관계 : 새 인스턴스를 만들거나 기존

  25. 25

    PHP의 매개 변수를 기반으로 클래스 인스턴스화

  26. 26

    매개 변수에 따라 파생 클래스의 새 인스턴스 만들기

  27. 27

    스택에 클래스 인스턴스 만들기

  28. 28

    새 유형에 대한 인스턴스 만들기

  29. 29

    각 인스턴스 Python에 대한 새 파일 만들기

뜨겁다태그

보관