Dlang : 다양한 유형의 배열을 처리하는 방법

티 리텐

저는 D를 배우고 있으며 일반적인 유형을 처리하는 방법을 가지고 있습니다. D에서 다양한 입력 인수로 대리자를 저장할 수있는 배열을 어떻게 선언 할 수 있습니까?

이 예제에서는 JavaScript가 .addEventListener / .dispatchEvent를 사용하는 방식을 부분적으로 모방하려고 노력하고 있으며이를 위해 다양한 이벤트 유형을 입력 인수로 가질 리스너 배열을 저장해야합니다. 나는 많은 타입 캐스팅을 앞뒤로 방지하려고 노력하고 있지만 동일한 배열에 저장해야하는 지점에 갇혀 있습니다.

    import std.stdio;

    class Event {
    }

    class NewEvent : Event {
    }

    class EventTarget {
        void addEventListener(T)(void delegate(T) listener) {
            this.listeners ~ listener;
        }

        void dispatchEvent(T)(T event) {
            foreach (listener; this.listeners) {
                writeln("listener: ", listener, " ", event);
                // TODO: call listener if it's input argument matches the T type
                // if (type is the one matching the listeners first input argument) {
                //  listener(event);
                // }
            }
        }

    private:
        // TODO: find a way to store multiple event types in this array
        void delegate(T)[] listeners;
    }

    void main() {
        auto target = new EventTarget();

        target.addEventListener((NewEvent event) {
            write("executed handler for NewEvent", event);
        });

        target.addEventListener((Event event) {
            write("executed handler for Event", event);
        });

        target.dispatchEvent(new NewEvent());
        target.dispatchEvent(new Event());
    }

여기에 놀이터가 있습니다 https://run.dlang.io/is/XdTVBc

Kozzi11

이것은 작동합니다.

import std.stdio;
import std.traits;

abstract class Event {

}

class NewEvent : Event {
}

class NewEvent2 : Event {
}

class EventTarget {
    void addEventListener(T : Event)(void delegate(T) listener) {
        this.listeners ~= DG(listener);
    }

    void dispatchEvent(T : Event)(T event) {

        foreach (listener; listeners)
        {            
            if (listener.type_name == fullyQualifiedName!T)
            {
                listener(event);
            }
        }
    }

private:    
    DG[] listeners;
}

struct DG
{
    string type_name;
    void delegate(Event) dg;
    alias dg this;
    this(T : Event)(void delegate(T) listener)
    {
        type_name = fullyQualifiedName!T;
        dg = cast(void delegate(Event)) listener;
    }
}

void main() {
    auto target = new EventTarget();

    target.addEventListener((NewEvent event) {
        writeln("executed handler for NewEvent", event);
    });

    target.addEventListener((NewEvent2 event) {
        writeln("executed handler for Event", event);
    });

    target.dispatchEvent(new NewEvent());
    target.dispatchEvent(new NewEvent2());
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다양한 방법의 배열을 사용하여

분류에서Dev

목록을 추가하기 위해 배열의 양식 객체를 처리하는 방법

분류에서Dev

MongoDB 샤딩 된 클러스터에서 다양한 서버 유형을 처리하는 방법

분류에서Dev

Dlang을 사용하여 배열의 요소 인덱스를 얻는 방법은 무엇입니까?

분류에서Dev

줄리아 : 다양한 유형의 배열 배열

분류에서Dev

Python 3.8의 다중 처리에서 문자열 배열을 공유하는 방법은 무엇입니까?

분류에서Dev

신경망을 훈련시키기 위해 다양한 모양의 속성을 처리하는 방법

분류에서Dev

Rust에서 다양한 표현으로 열거 형을 처리하는 표준 방법

분류에서Dev

다양한 유형의 선물을 선택하거나 가입하는 방법은 무엇입니까?

분류에서Dev

UML에서 다양한 유형의 필드 및 엔티티 연결을 모델링하는 방법

분류에서Dev

크기가 다른 다양한 유형의 파일을 업로드하는 방법을 표현

분류에서Dev

다양한 SwiftUI보기 유형을 지원하는 UIHostingController의 배열

분류에서Dev

이름없이 다양한 유형의 JSON 매개 변수 목록을 직렬화하는 방법

분류에서Dev

한 유형의 입력과 다른 유형의 출력을 처리하는 방법

분류에서Dev

다양한 유형의 DOM 조작을 처리하는 AngularJS

분류에서Dev

char 유형보다 큰 값을 처리하는 방법

분류에서Dev

동일한 유형의 키에 따라 배열을 그룹화하는 방법

분류에서Dev

동일한 유형의 키에 따라 배열을 그룹화하는 방법

분류에서Dev

다양한 유형의 객체 목록을 비교하는 효율적인 방법

분류에서Dev

레일로 다양한 유형의 사용자를 처리하는 방법은 무엇입니까?

분류에서Dev

다양한 유형의 프로젝트에서 뷰 모델을 사용하는 방법

분류에서Dev

다양한 GCM 알림 클릭을 처리하는 방법

분류에서Dev

Angularjs에서 ng-model의 배열을 처리하는 방법

분류에서Dev

느슨한 유형의 언어가 다른 데이터 유형을 처리하는 방법을 어떻게 알 수 있습니까?

분류에서Dev

다른 유형의 배열을 반환하는 방법은 무엇입니까?

분류에서Dev

동일한 발신자에 대해 Asp.Net WebHooks에서 다양한 페이로드 유형을 처리하는 권장 방법

분류에서Dev

다양한 유형의 키에 대한 해시 기능을 구현하는 방법은 무엇입니까?

분류에서Dev

Node.js에서 다양한 파일 유형을 처리하는 방법

분류에서Dev

(다양한 크기의) 행렬 배열을 만드는 방법

Related 관련 기사

  1. 1

    다양한 방법의 배열을 사용하여

  2. 2

    목록을 추가하기 위해 배열의 양식 객체를 처리하는 방법

  3. 3

    MongoDB 샤딩 된 클러스터에서 다양한 서버 유형을 처리하는 방법

  4. 4

    Dlang을 사용하여 배열의 요소 인덱스를 얻는 방법은 무엇입니까?

  5. 5

    줄리아 : 다양한 유형의 배열 배열

  6. 6

    Python 3.8의 다중 처리에서 문자열 배열을 공유하는 방법은 무엇입니까?

  7. 7

    신경망을 훈련시키기 위해 다양한 모양의 속성을 처리하는 방법

  8. 8

    Rust에서 다양한 표현으로 열거 형을 처리하는 표준 방법

  9. 9

    다양한 유형의 선물을 선택하거나 가입하는 방법은 무엇입니까?

  10. 10

    UML에서 다양한 유형의 필드 및 엔티티 연결을 모델링하는 방법

  11. 11

    크기가 다른 다양한 유형의 파일을 업로드하는 방법을 표현

  12. 12

    다양한 SwiftUI보기 유형을 지원하는 UIHostingController의 배열

  13. 13

    이름없이 다양한 유형의 JSON 매개 변수 목록을 직렬화하는 방법

  14. 14

    한 유형의 입력과 다른 유형의 출력을 처리하는 방법

  15. 15

    다양한 유형의 DOM 조작을 처리하는 AngularJS

  16. 16

    char 유형보다 큰 값을 처리하는 방법

  17. 17

    동일한 유형의 키에 따라 배열을 그룹화하는 방법

  18. 18

    동일한 유형의 키에 따라 배열을 그룹화하는 방법

  19. 19

    다양한 유형의 객체 목록을 비교하는 효율적인 방법

  20. 20

    레일로 다양한 유형의 사용자를 처리하는 방법은 무엇입니까?

  21. 21

    다양한 유형의 프로젝트에서 뷰 모델을 사용하는 방법

  22. 22

    다양한 GCM 알림 클릭을 처리하는 방법

  23. 23

    Angularjs에서 ng-model의 배열을 처리하는 방법

  24. 24

    느슨한 유형의 언어가 다른 데이터 유형을 처리하는 방법을 어떻게 알 수 있습니까?

  25. 25

    다른 유형의 배열을 반환하는 방법은 무엇입니까?

  26. 26

    동일한 발신자에 대해 Asp.Net WebHooks에서 다양한 페이로드 유형을 처리하는 권장 방법

  27. 27

    다양한 유형의 키에 대한 해시 기능을 구현하는 방법은 무엇입니까?

  28. 28

    Node.js에서 다양한 파일 유형을 처리하는 방법

  29. 29

    (다양한 크기의) 행렬 배열을 만드는 방법

뜨겁다태그

보관