포인터에 캡처 된 매개 변수와 함께 람다를 저장하는 방법이 있습니다.

세바스찬 R.

나는 람다에 문제가 있으며 포인터에 저장하고 싶지만 상수 변수를 사용하지 않고 만듭니다.

// Example program
#include <iostream>
#include <string>

template<short n>
void speak(){
    std::cout << "speak:[" << n << "]" << std::endl;
}

int main()
{
    typedef void(*func)(void);

    func ptr[8];
    const short j = 10;
    
    for(short i = 0; i < 4; i++){
       ptr[i] = [=](void)->void{
            std::cout << "lamda:[" << j << "]" << std::endl;
            };
        /*ptr[i] = [=](void)->void{
            std::cout << "lamda:[" << i << "]" << std::endl;
            };*/
        ptr[i + 4] = speak<j>;
        //ptr[i + 4] = speak<i>;
    }
    
    for(short i = 0; i < 8; i++){
        ptr[i]();
    }
    
    return 0;
}

상수 var "j"로 람다를 정의 할 수 있지만 "i"로는 정의 할 수 없습니다. i를 사용하여 수행 할 수있는 방법이 있습니까? 따라서 수행 할 필요가 없습니다.

ptr[0] = [=](void)->void{
            std::cout << "lamda:[" << 0 << "]" << std::endl;
            };
ptr[1] = [=](void)->void{
            std::cout << "lamda:[" << 1 << "]" << std::endl;
            };
ptr[2] = [=](void)->void{
            std::cout << "lamda:[" << 2 << "]" << std::endl;
            };
ptr[3] = [=](void)->void{
            std::cout << "lamda:[" << 3 << "]" << std::endl;
            };

템플릿 함수는 성공하지 못한 나의 다른 시도였습니다.

"i"사용을 시도했을 때 "오류 : 할당에서 'main () :: <lambda ()>'를 'func {aka void ( ) ()}' 로 변환 할 수 없습니다. "*

user253751

std::function포인터 대신 사용 합니다. 헤더를 포함 <functional>하고 변경하십시오.

typedef void(*func)(void);

...에

typedef std::function<void(void)> func;

모든 것이 작동합니다!

일할 (void)왜 글을 쓰는지 잘 모르겠습니다 ().

함수 포인터를 사용할 수없는 이유는 함수 포인터가 코드를 가리 키기 때문입니다. 캡처 된 변수가 없습니다. std::function캡처 된 변수를 보유 할 수도있는 클래스입니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JavaScript 변수에 포함 된 _User 개체를 다시 형식으로 변환하는 방법은 parse.com 포인터 열에 저장할 수 있습니다.

분류에서Dev

오버로드 된 함수 모호성의 매개 변수로 람다 및 함수 포인터를 캡처하지 않음

분류에서Dev

C ++의 std :: function에 포함 된 람다 (캡처 중일 수 있음)를 고유하게 식별하는 방법

분류에서Dev

C ++ 람다-함수 매개 변수 캡처 방법

분류에서Dev

함수 시그니처와 함께 매개 변수를 전달하는 방법

분류에서Dev

C 스타일 함수 포인터와 람다로 채워진 벡터를 만드는 방법 (캡처 유무)

분류에서Dev

C #에서 접근 자와 함께 매개 변수를 사용하는 방법이 있습니까?

분류에서Dev

이 람다가 포인터의 복사본을 캡처 할 수있는 방법이 있습니까?

분류에서Dev

함수 인수를 캡처하고 나중에 C ++ 11에서 실행하기 위해 함수 포인터를 저장하는 방법은 무엇입니까?

분류에서Dev

매개 변수와 함께 함수 호출을 저장하는 방법이 있습니까?

분류에서Dev

람다에서 매개 변수 캡처 이동

분류에서Dev

C ++ 20 : 형식이 아닌 템플릿 매개 변수에서 람다를 캡처하지 않음

분류에서Dev

클래스 메서드를 매개 변수로 설정하고 Visual Studio 2017에서 람다와 함께 사용하는 방법은 무엇입니까?

분류에서Dev

C 코드의 Lint : 함수의 매개 변수 (포인터)는 const 일 수 있습니다. * 그러나 * 나는 전달 된 포인터에 쓰고있다

분류에서Dev

매개 변수와 함께 다양한 void 함수 포인터의 벡터 저장

분류에서Dev

다른 함수 내에서 매개 변수와 함께 함수의 반환 값을 사용하는 방법

분류에서Dev

기본 매개 변수가있는 함수를 템플릿 화 된 생성자에 전달하지 않고 std :: function <void ()> 작업으로 람다를 사용하여 저장하지 않는 이유는 무엇입니까?

분류에서Dev

C ++ 20 내부의 매개 변수를 캡처하는 람다의 다른 선언에는 표현식이 필요합니다.

분류에서Dev

람다 매개 변수 캡처에 템플릿 형식 정의를 사용하는 방법은 무엇입니까?

분류에서Dev

기존 std :: exponential_distribution 객체에서 람다 매개 변수를 재설정하는 문서화 된 방법이 있습니까?

분류에서Dev

AngularJS의 다른 매개 변수와 함께 http.post에 이미지 파일을 업로드하는 방법

분류에서Dev

함수에 전달하기 위해 일부 설정된 매개 변수와 함께 read.csv를 이름에 할당합니다.

분류에서Dev

바디 매개 변수는 형식 매개 변수와 함께 사용할 수 없습니다 - 헤더 및 JSON 데이터와 척하기 클라이언트

분류에서Dev

bstNode *를 bstNode **로 변환 할 수 없다는 코드 오류. 여기서는 재귀와 함께 이중 포인터 개념을 사용하고 있습니다.

분류에서Dev

체크 포인트에 저장된 매개 변수가 융합 모델의 매개 변수와 다른 이유는 무엇입니까?

분류에서Dev

javafx에서 이벤트와 함께 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

flutter : 상태가있는 생성자에서 매개 변수와 함께 함수를 사용하는 방법

분류에서Dev

함수 포인터를 통해 가변 함수에 전달 된 매개 변수는 값을 변경합니다.

분류에서Dev

잘못된 매개 변수 번호 : 바인딩 된 변수의 수가 PHP의 데이터베이스에있는 수와 일치하지 않습니다.

Related 관련 기사

  1. 1

    JavaScript 변수에 포함 된 _User 개체를 다시 형식으로 변환하는 방법은 parse.com 포인터 열에 저장할 수 있습니다.

  2. 2

    오버로드 된 함수 모호성의 매개 변수로 람다 및 함수 포인터를 캡처하지 않음

  3. 3

    C ++의 std :: function에 포함 된 람다 (캡처 중일 수 있음)를 고유하게 식별하는 방법

  4. 4

    C ++ 람다-함수 매개 변수 캡처 방법

  5. 5

    함수 시그니처와 함께 매개 변수를 전달하는 방법

  6. 6

    C 스타일 함수 포인터와 람다로 채워진 벡터를 만드는 방법 (캡처 유무)

  7. 7

    C #에서 접근 자와 함께 매개 변수를 사용하는 방법이 있습니까?

  8. 8

    이 람다가 포인터의 복사본을 캡처 할 수있는 방법이 있습니까?

  9. 9

    함수 인수를 캡처하고 나중에 C ++ 11에서 실행하기 위해 함수 포인터를 저장하는 방법은 무엇입니까?

  10. 10

    매개 변수와 함께 함수 호출을 저장하는 방법이 있습니까?

  11. 11

    람다에서 매개 변수 캡처 이동

  12. 12

    C ++ 20 : 형식이 아닌 템플릿 매개 변수에서 람다를 캡처하지 않음

  13. 13

    클래스 메서드를 매개 변수로 설정하고 Visual Studio 2017에서 람다와 함께 사용하는 방법은 무엇입니까?

  14. 14

    C 코드의 Lint : 함수의 매개 변수 (포인터)는 const 일 수 있습니다. * 그러나 * 나는 전달 된 포인터에 쓰고있다

  15. 15

    매개 변수와 함께 다양한 void 함수 포인터의 벡터 저장

  16. 16

    다른 함수 내에서 매개 변수와 함께 함수의 반환 값을 사용하는 방법

  17. 17

    기본 매개 변수가있는 함수를 템플릿 화 된 생성자에 전달하지 않고 std :: function <void ()> 작업으로 람다를 사용하여 저장하지 않는 이유는 무엇입니까?

  18. 18

    C ++ 20 내부의 매개 변수를 캡처하는 람다의 다른 선언에는 표현식이 필요합니다.

  19. 19

    람다 매개 변수 캡처에 템플릿 형식 정의를 사용하는 방법은 무엇입니까?

  20. 20

    기존 std :: exponential_distribution 객체에서 람다 매개 변수를 재설정하는 문서화 된 방법이 있습니까?

  21. 21

    AngularJS의 다른 매개 변수와 함께 http.post에 이미지 파일을 업로드하는 방법

  22. 22

    함수에 전달하기 위해 일부 설정된 매개 변수와 함께 read.csv를 이름에 할당합니다.

  23. 23

    바디 매개 변수는 형식 매개 변수와 함께 사용할 수 없습니다 - 헤더 및 JSON 데이터와 척하기 클라이언트

  24. 24

    bstNode *를 bstNode **로 변환 할 수 없다는 코드 오류. 여기서는 재귀와 함께 이중 포인터 개념을 사용하고 있습니다.

  25. 25

    체크 포인트에 저장된 매개 변수가 융합 모델의 매개 변수와 다른 이유는 무엇입니까?

  26. 26

    javafx에서 이벤트와 함께 매개 변수를 전달하는 방법은 무엇입니까?

  27. 27

    flutter : 상태가있는 생성자에서 매개 변수와 함께 함수를 사용하는 방법

  28. 28

    함수 포인터를 통해 가변 함수에 전달 된 매개 변수는 값을 변경합니다.

  29. 29

    잘못된 매개 변수 번호 : 바인딩 된 변수의 수가 PHP의 데이터베이스에있는 수와 일치하지 않습니다.

뜨겁다태그

보관