티스토리 뷰

반응형

c++17로 개발을 하다보면 가끔 특정 값을 전달받을 필요가 있을때가 있습니다.

 

옛날에는 Memory Pointer를 사용하여 많이 사용했으나, 요즘은 안정성을 위해서

Pointer를 사용하는 것보다 문자열의 경우 std::string을 사용하는 것이 보다 안전하겠지요.

 

전통적인 C 함수의 아큐먼트 리턴 방식

void function ( /* INPUT */ int n, /* OUTPUT */ char *ret)
{
   if( n == 0 ) ret = "error";
}

 

위 코드에서 char *ret를 반환 하도록 사용하는 것이 일반적 이었습니다.

 

그럼 function 함수와 람다를 사용하여 비슷하게 사용한 예 입니다.

#include <string>
#include <functional>

void test_function ( std::function<void(std::string s)> func)
{
  std::string ret = "error";
  
  func(ret);
}

void test_call ()
{
   std::string ret;
   
   test_function([&](std::string ss)
   {
      ret = ss;
   });
}

 

조금 이해가 될런지 모르겠습니다.

 

간단하게 설명 한다면 test_call()를 호출하게 되면 , 내부에서 test_function()를 호출하게 되어 있습니다.

이때 전달되는 아규먼트는 변수가 아니라 람다 함수 입니다.

 

test_function() 함수에서 내부에서 처리 중 입력된 function를 재 호출하여, 

람다 함수로 되돌아 오는 방식 입니다.

 

반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함