본문 바로가기
VisualStudio.C++.C#/C . C++

함수포인터, 콜백(Callback)

by i.got.it 2015. 1. 11.

 

함수포인터

 

 

1. int Function(int a) {... } ; 로 정의된  함수가 있다치자.

 

2. 위 1의 함수의 포인터(함수이름이 포인터임)를 받을 수 있는 함수포인터 변수 pFunc 선언하고 1의 함수포인터를 대입하는 방법 

 int (*pFunc)(int) = Function; 

 

3. 2처럼 대입하고나서, pFunc(1); 이라고 호출하면 Function(1); 이 호출되는 것임.

 

4. 1의 함수를  다른 함수 "myfunc" 의 입력인자 로 전달하기 위한 다른 함수 "myfunc" 정의 방법.

void myfunc( int (*pFunc)(int) )

{

   pFunc(1);

}

myfunc 호출시 상기1의 함수를 인자로 전달하는 법 : myfunc(Function);

 

5. 상기2와 같은 함수포인터 변수를 사용자 타입정의하는 법..

typedef int(*pFunc)(int);

 

6. 상기 5에서 선언된 타입으로 변수 선언하는법.

pFunc my_pfunc1;

pFunc my_pfunc2;

 

7. 상기 5에서의 사용자 정의 타입으로 상기 4의 함수포인터 전달하는 인자 부분 변경하면,

 

void myfunc( pFunc p_func )

{

p_func(1);

}

mufunc 호출시 상기1의 함수를 인자로 전달하는 법 : myfunc(Function);

 

 

 

 

 

 

콜백개념

 

 

8. "이곳"에 있는 함수를 다른곳(예.  다른 클래스 개체, DLL등 )에 전달하여 다른 곳에서 "이곳"의 함수를 호출하는 법 <- 이런걸 콜백이라 부름.

"다른 곳"으로 "이 곳"의 함수를 전달하고 "다른 곳"에서 "이곳"의 함수를 호출하게 하는 것.

 

"다른 곳" 코딩.

 

typedef int(*pFunc)(int);

pFunc your_func;          // "이 곳"의 함수를 받을 함수포인터변수 선언이다.

 

//"이 곳"의 함수포인터로 인자를 전달하면 your_func 으로 대입해두는 함수.

void regi_func(pFunc p_func)

{

  your_func = p_func;  // 인자로 전달받은 함수포인터를 your_func 에 대입했다.

}

//

void exec_func()

{

 your_func(1);  // regi_func 의 인자로 전달된 함수가 실행되는 것임.

}

 

"이곳 " 코딩.

이곳에는 int Function(int a) {... } 함수가 정의되어있는데 이 함수를 "다른 곳" 의 regi_func 을 호출하면서 함수포인터를 전달한다.

regi_func(Function);

 

작동방식 요약.- 콜백 작동 개념임.

위와 같이 Function 이라는 함수포인터는  "다른곳" 의 regi_func 의 인자로 전달하여 "다른곳"의 your_func 에 대입된다..  exec_func 실행될때 your_func 가 실행되는데 이것이 실제 실행되는 것은 "이곳"의 Function(1) 이 실행된 것이다.

 

 

주의사항.

- 위와같은 함수포인터 기반의 콜백구현시 "이곳"측의 함수는 클래스의 멤버함수를 전달하지 못하며, 클래스에서 static 함수만 전달가능한 단점이 있다.

static 함수이다 보니 함수내에서 클래스 멤버에 접근하지 못하여 불편한 경우가 자주 발생한다. static 함수내에서 클래스 멤버에 접근하지 않아도 되는 경우는 문제없이 사용가능하나, 범용적이지 못한 방법이라 콜백 구현하는 경우 위와 같은 함수 포인터 보다는 STL(Standard Template Library) 에서 제공하는 std::function, std::bind 를 이용하여 콜백구현하면 클래스 멤버 함수를 콜백함수로 구현가능하여 매우 편리하다.

STL 기반 콜백구현 상세설명 보기 -> http://igotit.tistory.com/213

 

STL std::function 기반 콜백함수 구현.

개요 통상 콜백함수 구현시 함수포인터 기반으로 구현하는 방식 (보기 -> http://igotit.tistory.com/212 ) 으로는 클래스 멤버함수를 콜백으로 등록하지 못하는 단점이 있다. STL (Standard Template Library) 에

igotit.tistory.com

 

 

연관 

 

 

 

메타트레이더의 함수포인터 관련 문법은 상기 C 문법과 동일함. 

 

메타트레이더 . 코딩 . function pointer . 콜백 함수

메타트레이더의 함수 포인터, 콜백 - C 에서의 함수 포인터, 콜백 개념 / 문법 과 동일. typedef int (*TFunc)(int,int); TFunc func_ptr; int sub(int x,int y) { return(x-y); } int add(int x,int y) { return(x+y); } int neg(int x) { re

igotit.tistory.com

 

 

 

상위정리

 

Visual Studio , Visual C++ 활용 정리.

Visual Studio C++ 활용 Visual Studio Visual C++ / C# 1.설치, 설정 주제 비고. Visual Studio 2010 설치. Visual Studio 2013 (Community)무료 설치. Visaul Studio 2015 (Community)무료 설치. - Visual Studio 2015 버전은 이전 버전대비

igotit.tistory.com

 

 

 

 


첫 등록 : 2015.01.11

최종 수정 : 2023.03.20

단축 주소 : https://igotit.tistory.com/212


 

 

 

 

댓글



 

비트코인




암호화폐       외환/나스닥/골드       암호화폐/외환/나스닥/골드 암호화폐/외환/나스닥/골드   암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)     롤오버 이자 없는 스왑프리계좌
( 스왑프리 암호화폐도 거래 가능 )    
MT4, MT5 , cTrader 모두 지원     FTMO 계좌 매매운용. MT4,MT5