본문 바로가기

콜백   ( 4 )


메타트레이더 . 코딩 . 클래스 non-static 멤버함수를 콜백함수로 전달하기 개요 상황 : 2개의 클래스 A(예 CCyFinDevice), B(예 CCyFinOnNewBar) 가 있고, A에서 B 인스턴스 만들어 사용중이고, B에게 A측의 콜백함수를 전달해야함. 문제점 클래스의 멤버함수는 콜백으로 전달 불가하므로 A에서 콜백함수를 static 으로 선언하면 B 에게 전달은 가능하다. A 의 static 함수 내부에서는 A의 멤버에 접근 못하게 되고 결국에 C스타일 코드 구조가 나와 모듈화가 달성되지 않아 견고한 구조화를 심각하게 방해한다. 해결책 - 클래스 A의 non-static 멤버 함수를 콜백으로 사용가능하게 한다. MQL5 의 EA 에서 클래스 B 로 전달할 콜백함수를 만들고, ea 의 콜백함수 내에서 클래스 A의 멤버함수를 실행하게 하고, 클래스 B측으로 EA의 함수포인.. 2019. 5. 21.
메타트레이더 . 코딩 . 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) { return(~x); } func_ptr=sub; Print(func_ptr(10,5)); func_ptr=add; Print(func_ptr(10,5)); func_ptr=neg; // error: neg is not of int (int,int) type Print(func_ptr(10)); // error: there should be two parameters.. 2019. 5. 13.
STL std::function 기반 콜백함수 구현. 개요 통상 콜백함수 구현시 함수포인터 기반으로 구현하는 방식 (보기 -> http://igotit.tistory.com/212 ) 으로는 클래스 멤버함수를 콜백으로 등록하지 못하는 단점이 있다. STL (Standard Template Library) 에서 제공하는 std::function, std::bind 등을 사용하면 클래스 멤버함수도 콜백함수로 등록가능하므로 대단히 편리하다. STL 기반 콜백구현방법 아래 설명방식에서 "다른 곳", "이곳" 이란 표현은 함수포인터 기반 콜백구현방법 설명글 (http://igotit.tistory.com/212 )에서의 것과 동일한 것임. "이곳"에 있는 함수(클래스의 멤버함수도 가능하다.)를 다른곳(예. 다른 클래스 개체, DLL등 )에 전달하여 다른 곳에서 "이.. 2015. 1. 11.
함수포인터, 콜백(Callback) 함수포인터 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와 같은 함수포인터 변수.. 2015. 1. 11.


 

비트코인




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