두 람다간에 변수 공유

richardjsimkins

두 람다 함수 사이에 포함 범위의 변수를 공유 할 수 있기를 원합니다. 다음이 있습니다.

void holdAdd(const Rect& rectangle, Hold anonymousHeld, Hold anonymousFinish) {
    std::map<int,bool> identifierCollection;

    HoldFinish holdFinish = [=](const int& identifier) mutable {
        if (identifierCollection.count(identifier) == 0) return;

        identifierCollection.erase(identifier);
        anonymousFinish();
    };

    holdCollisionCollection.push_back([=](const int& identifier, const Vec2& point) mutable {
        if (rectangle.containsPoint(point)) {
            identifierCollection[identifier] = true;
            anonymousHeld();
        } else {
            holdFinish(identifier);
        }
    });
    holdFinishCollection.push_back(holdFinish);
}

두 번째 람다 함수와 holdFinish다른 구현을 가리키는 디버거에서 볼 수 있습니다 identifierCollection.

내가 사용 [=, &identifierCollection]하면 사용 EXC_BAD_ACCESS여부를 던집니다 mutable.

인라인 함수를 구현하는 다른 언어에 대한 나의 경험은 이것이 가능해야한다는 것입니다. 예를 들어 javascript에서 :

var a = 10;
var b = function() {
    a += 2;
}
var c = function() {
    a += 3;
}
b();
c();
alert(a);

경고 할 것 15입니다.

두 람다 함수가 동일한 identifierCollection 구현을 참조하도록하려면 어떻게해야합니까? 따라서 자바 스크립트 예제와 동일한 방식으로 작동합니다.

Lightness Races in Orbit

Unlike in some scripting languages, identifierCollection's lifetime won't be extended simply because you captured it into a closure. So as soon as you change that [=] for a [&] to capture by reference, it's a dangling reference to a local variable that you're capturing.

You'll have to manage the lifetime of identifierCollection yourself; frankly, this sounds like the perfect opportunity for a shared pointer, captured by value into each lambda. The dynamically-allocated map it wraps will literally exist for as long as you need it to.

void holdAdd(const Rect& rectangle, Hold anonymousHeld, Hold anonymousFinish)
{
    auto identifierCollection = std::make_shared<std::map<int,bool>>();

    HoldFinish holdFinish = [=](const int& identifier) mutable {
        if (identifierCollection->count(identifier) == 0) return;

        identifierCollection->erase(identifier);
        anonymousFinish();
    };

    holdCollisionCollection.push_back([=](const int& identifier, const Vec2& point) mutable {
        if (rectangle.containsPoint(point)) {
            (*identifierCollection)[identifier] = true;
            anonymousHeld();
        } else {
            holdFinish(identifier);
        }
    });
    holdFinishCollection.push_back(holdFinish);
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자바에서는 람다 이유 캡처 변수에 모두 getClass ()가 호출이다

분류에서Dev

React Hooks, 두 함수간에 상태를 공유하는 방법

분류에서Dev

R의 다른 두 열간에 공유 된 단어 수를 세는 새 열을 생성 하시겠습니까?

분류에서Dev

공유 드라이브의 두 폴더간에 파일 이동-공유 드라이브 항목에서이 작업을 사용할 수 없습니다.

분류에서Dev

mvvm을 사용하여 두 저장소간에 변수를 공유 할 수 없습니다.

분류에서Dev

다른 CMake 파일간에 변수를 공유하는 방법

분류에서Dev

두 HttpRequest간에 Java 객체 공유

분류에서Dev

두 스레드 공유 정적 변수

분류에서Dev

Sinatra 요청간에 Ruby 변수 공유

분류에서Dev

컨트롤러에서 두 가지 방법간에 변수를 공유합니까?

분류에서Dev

클래스간에 변수 공유

분류에서Dev

C의 두 파일간에 함수 구현 공유

분류에서Dev

ViewController간에 변수 공유

분류에서Dev

Java에서 전역 변수를 사용하지 않고 두 클래스간에 변수를 공유하는 방법은 무엇입니까?

분류에서Dev

동일한 컴퓨터에서 두 개의 다른 OS간에 파일을 공유 할 수 있습니까?

분류에서Dev

대리자가 두 창간에 변수를 공유하는 좋은 방법입니까?

분류에서Dev

두 람다간에 변수 공유

분류에서Dev

두 localStorage 항목간에 개체 공유

분류에서Dev

R의 두 변수간에 공유되지 않는 인덱스 식별

분류에서Dev

Python 2.x의 서로 다른 두 모듈에서 두 함수간에 데이터 공유

분류에서Dev

angularjs는 함수 간 변수 공유

분류에서Dev

두 개의 독립적 인 쉘 스크립트간에 변수 공유

분류에서Dev

업데이트되는 즉시 두 스레드 간의 공유 변수에 대한 변경 사항 반영

분류에서Dev

두 노드 앱간에 세션 공유

분류에서Dev

개별적으로 실행되는 두 개의 Python 스크립트간에 변수를 공유하는 방법

분류에서Dev

Kotlin에서 유형 매개 변수 수가 다른 두 함수

분류에서Dev

Ansible : 그룹간에 변수 공유

분류에서Dev

두 프로젝트간에 공통 C # 클래스를 공유하지만 프로젝트에서 변경할 수 있도록 허용

분류에서Dev

SDL2, FnMut 및 mpsc, 보낸 사람은 스레드간에 안전하게 공유 할 수 없습니다.

Related 관련 기사

  1. 1

    자바에서는 람다 이유 캡처 변수에 모두 getClass ()가 호출이다

  2. 2

    React Hooks, 두 함수간에 상태를 공유하는 방법

  3. 3

    R의 다른 두 열간에 공유 된 단어 수를 세는 새 열을 생성 하시겠습니까?

  4. 4

    공유 드라이브의 두 폴더간에 파일 이동-공유 드라이브 항목에서이 작업을 사용할 수 없습니다.

  5. 5

    mvvm을 사용하여 두 저장소간에 변수를 공유 할 수 없습니다.

  6. 6

    다른 CMake 파일간에 변수를 공유하는 방법

  7. 7

    두 HttpRequest간에 Java 객체 공유

  8. 8

    두 스레드 공유 정적 변수

  9. 9

    Sinatra 요청간에 Ruby 변수 공유

  10. 10

    컨트롤러에서 두 가지 방법간에 변수를 공유합니까?

  11. 11

    클래스간에 변수 공유

  12. 12

    C의 두 파일간에 함수 구현 공유

  13. 13

    ViewController간에 변수 공유

  14. 14

    Java에서 전역 변수를 사용하지 않고 두 클래스간에 변수를 공유하는 방법은 무엇입니까?

  15. 15

    동일한 컴퓨터에서 두 개의 다른 OS간에 파일을 공유 할 수 있습니까?

  16. 16

    대리자가 두 창간에 변수를 공유하는 좋은 방법입니까?

  17. 17

    두 람다간에 변수 공유

  18. 18

    두 localStorage 항목간에 개체 공유

  19. 19

    R의 두 변수간에 공유되지 않는 인덱스 식별

  20. 20

    Python 2.x의 서로 다른 두 모듈에서 두 함수간에 데이터 공유

  21. 21

    angularjs는 함수 간 변수 공유

  22. 22

    두 개의 독립적 인 쉘 스크립트간에 변수 공유

  23. 23

    업데이트되는 즉시 두 스레드 간의 공유 변수에 대한 변경 사항 반영

  24. 24

    두 노드 앱간에 세션 공유

  25. 25

    개별적으로 실행되는 두 개의 Python 스크립트간에 변수를 공유하는 방법

  26. 26

    Kotlin에서 유형 매개 변수 수가 다른 두 함수

  27. 27

    Ansible : 그룹간에 변수 공유

  28. 28

    두 프로젝트간에 공통 C # 클래스를 공유하지만 프로젝트에서 변경할 수 있도록 허용

  29. 29

    SDL2, FnMut 및 mpsc, 보낸 사람은 스레드간에 안전하게 공유 할 수 없습니다.

뜨겁다태그

보관