C ++에서 나중에 이벤트 예약 : 실행할 작업을 전달하는 방법

다음 코드를 실행하여 클래스 A에서 taskFun을 1000ms 후에 실행되도록 예약하려고합니다. 이 코드를 실행하면이 오류가 발생합니다.

main.cpp:9:70: error: no type named 'type' in 'std::__1::result_of<void (A::*(int))(int)>'
    std::function<typename std::result_of < callable(arguments...)>::type() > task(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
main.cpp:29:10: note: in instantiation of function template specialization 'later<void (A::*)(int), int>' requested here
         later(1000, true, &A::taskFun, 101);
     ^

taskFun을 정적 함수로 정의하면이 오류가 발생하지 않습니다. 그러나 나는 그것이 정적 인 것을 원하지 않습니다. 비 정적 입력을 허용하도록 '나중에'함수를 업데이트하는 방법이 있습니까?

    #include <functional>
    #include <chrono>
    #include <future>
    #include <cstdio>
    #include <iostream>
    
    template <class callable, class... arguments>
    void later(int after, bool async, callable f, arguments&&... args) {
        std::function<typename std::result_of < callable(arguments...)>::type() > task(std::bind(std::forward<callable>(f), std::forward<arguments>(args)...));
    
        if (async) {
            std::thread([after, task]() {
                std::this_thread::sleep_for(std::chrono::milliseconds(after));
                task();
            }).detach();
        } else {
            std::this_thread::sleep_for(std::chrono::milliseconds(after));
            task();
        }
    }
    


    class A {
    public:
    
        A() {
        }
    
        void callLater() {
            later(1000, true, &A::taskFun, 99);
        }
    
        void taskFun(int a) {
            std::cout << a << "\n";
        }
    
    };
날개를 가진 소행성

당신은 가까웠습니다.

비 정적 멤버 함수로서 taskFun해진다 숨겨진 인자를 갖는다 this. 인수 외에도 이것을 콜백에 바인딩해야합니다 99.

later(1000, true, &A::taskFun, this, 99);

이제 인수 목록이 일치합니다.

람다는 아마도 더 좋을 것입니다.

later(1000, true, [=]() { taskFun(99); });

이 접근 방식을 고수하면 제거 할 수 std::function arguments 에서 매개 변수 팩 later.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

사용자가 실행할 수없는 예약 된 작업에서 VB6 앱을 실행하는 방법

분류에서Dev

powers 셸 명령을 통해 작업 스케줄러에서 예약 된 작업을 실행하는 방법

분류에서Dev

Java의 ScheduledExecutorService에서 보류중인 모든 예약 된 작업을 실행하는 방법

분류에서Dev

C # .NET 웹 애플리케이션에서 매일 작업을 예약하는 적절한 방법

분류에서Dev

사용자가 시스템에 로그인 할 때 실행되는 예약 된 작업을 만드는 방법

분류에서Dev

Ktor 마이크로 서비스 앱에서 작업을 예약하는 방법

분류에서Dev

Rails에서 반복적 인 작업 (예 : 정보 페이지 스크랩)을 예약하고 실행하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

웹 서버를 통해 PHP에서 예약 된 작업을 실행하는 방법

분류에서Dev

오늘 이전에 예약을 중지하는 방법

분류에서Dev

셸에서 크론 작업을 예약 / 예약 취소하는 방법

분류에서Dev

셸에서 크론 작업을 예약 / 예약 취소하는 방법

분류에서Dev

자바에서 역학 작업을 예약하는 방법

분류에서Dev

Linux에서 부팅시 작업을 예약하는 방법

분류에서Dev

Cesium에서 예약 된 ontick 이벤트를 중지하는 방법

분류에서Dev

Google App Engine에서 10 분 이상 실행되는 작업을 예약하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

다른 사용자에 대해 다른 시간에 실행되도록 작업을 예약하는 방법

분류에서Dev

예약 된 모든 github 작업을 한 번에 "실행 취소"하는 방법은 무엇입니까?

분류에서Dev

PreviewKeyDown 이벤트에서 키 작업을 취소하는 방법

분류에서Dev

cfschedule을 통해 예약 된 작업에 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

하나의 Q # 작업을 C # 또는 F #에서 다른 Q # 작업으로 전달하는 방법

분류에서Dev

onchange 이벤트 핸들러에서 클릭 이벤트 실행을 중지하는 방법

분류에서Dev

마운트 할 때 반응 함수에서 작업을 전달하는 방법이 있습니까?

분류에서Dev

Microsoft Bot Framework + C #에서 작업을 예약하는 방법은 무엇입니까?

분류에서Dev

Windows 7에서 매일 1 분 늦게 실행되는 작업 스케줄러로 작업을 예약하는 방법은 무엇입니까?

분류에서Dev

C #에서 처음 실행되는 이벤트를 방지하는 방법

분류에서Dev

C # Winforms에서 창을 활성화 한 이벤트를 가져와 전달하는 방법

분류에서Dev

forEach에서 작업을 수행하고 Java 스트림의 groupingBy에 전달하는 방법

분류에서Dev

yum 자동 업데이트가 밤에만 실행되도록 예약하는 방법은 무엇입니까?

분류에서Dev

ASP.NET에서 예약 된 작업을 수행하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    사용자가 실행할 수없는 예약 된 작업에서 VB6 앱을 실행하는 방법

  2. 2

    powers 셸 명령을 통해 작업 스케줄러에서 예약 된 작업을 실행하는 방법

  3. 3

    Java의 ScheduledExecutorService에서 보류중인 모든 예약 된 작업을 실행하는 방법

  4. 4

    C # .NET 웹 애플리케이션에서 매일 작업을 예약하는 적절한 방법

  5. 5

    사용자가 시스템에 로그인 할 때 실행되는 예약 된 작업을 만드는 방법

  6. 6

    Ktor 마이크로 서비스 앱에서 작업을 예약하는 방법

  7. 7

    Rails에서 반복적 인 작업 (예 : 정보 페이지 스크랩)을 예약하고 실행하는 가장 좋은 방법은 무엇입니까?

  8. 8

    웹 서버를 통해 PHP에서 예약 된 작업을 실행하는 방법

  9. 9

    오늘 이전에 예약을 중지하는 방법

  10. 10

    셸에서 크론 작업을 예약 / 예약 취소하는 방법

  11. 11

    셸에서 크론 작업을 예약 / 예약 취소하는 방법

  12. 12

    자바에서 역학 작업을 예약하는 방법

  13. 13

    Linux에서 부팅시 작업을 예약하는 방법

  14. 14

    Cesium에서 예약 된 ontick 이벤트를 중지하는 방법

  15. 15

    Google App Engine에서 10 분 이상 실행되는 작업을 예약하는 가장 좋은 방법은 무엇입니까?

  16. 16

    다른 사용자에 대해 다른 시간에 실행되도록 작업을 예약하는 방법

  17. 17

    예약 된 모든 github 작업을 한 번에 "실행 취소"하는 방법은 무엇입니까?

  18. 18

    PreviewKeyDown 이벤트에서 키 작업을 취소하는 방법

  19. 19

    cfschedule을 통해 예약 된 작업에 매개 변수를 전달하는 방법은 무엇입니까?

  20. 20

    하나의 Q # 작업을 C # 또는 F #에서 다른 Q # 작업으로 전달하는 방법

  21. 21

    onchange 이벤트 핸들러에서 클릭 이벤트 실행을 중지하는 방법

  22. 22

    마운트 할 때 반응 함수에서 작업을 전달하는 방법이 있습니까?

  23. 23

    Microsoft Bot Framework + C #에서 작업을 예약하는 방법은 무엇입니까?

  24. 24

    Windows 7에서 매일 1 분 늦게 실행되는 작업 스케줄러로 작업을 예약하는 방법은 무엇입니까?

  25. 25

    C #에서 처음 실행되는 이벤트를 방지하는 방법

  26. 26

    C # Winforms에서 창을 활성화 한 이벤트를 가져와 전달하는 방법

  27. 27

    forEach에서 작업을 수행하고 Java 스트림의 groupingBy에 전달하는 방법

  28. 28

    yum 자동 업데이트가 밤에만 실행되도록 예약하는 방법은 무엇입니까?

  29. 29

    ASP.NET에서 예약 된 작업을 수행하는 방법은 무엇입니까?

뜨겁다태그

보관