일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그누보드
- 쿠팡파트너스
- 무료일러스트
- 가상서버
- Ajax
- 자바스크립트
- 파이썬
- 프로그램
- vps
- c#
- cocos2d-x
- php
- 웹
- 챗지피티
- Python
- 아두이노 기초강좌
- 워드프레스
- flex
- vultr
- 자동블로그
- 자동포스팅
- 파싱
- 아두이노 초보
- Php공부
- HTML
- 자동글쓰기
- Javascript
- 아두이노
- 아두이노 강좌
- ChatGPT
- Today
- Total
플밍
c++에서 Delegate(콜백함수) 구현 본문
그동안 c++ 에서 콜백함수를 구현하는걸 상당히 어렵해 해왔었다.
객체와 메서드를 주고 typedef 만들고 괄호에 신경쓰고... 암튼 할때마다 형식이 안외어져서 힘들었는데
생각외로 간단히 해결이 된다.
그냥 java나 c#처럼 사용하면 되는걸 모르고 이 고생을 했다니 ㅜㅜ
#ads_1
아래는 예제
#include <iostream>
using namespace std;
class Animal;
class AnimalDelegate{
public:
virtual void onSound(Animal* pSender)=0;
virtual void onWalk(Animal* pSender)=0;
};
class Animal{
private:
AnimalDelegate* delegate;
public:
Animal(){
this->delegate = NULL;
}
void setDelegate(AnimalDelegate* delegate){
this->delegate = delegate;
}
void sound(){
if(this->delegate){
this->delegate->onSound(this);
}
}
void walk(){
if(this->delegate){
this->delegate->onWalk(this);
}
}
};
//개 : Delegate를 내부에 직접 구현
class Dog:public Animal, public AnimalDelegate{
public:
Dog(){
this->setDelegate(this);
}
void onSound(Animal* pSender){
cout << "Dog: 멍멍!" << endl;
}
void onWalk(Animal* pSender){
cout << "Dog: 개가 걷는다" << endl;
}
};
//고양이 Delegate
class CatDelegate:public AnimalDelegate{
public:
void onSound(Animal* pSender){
cout << "Cat: 야옹~" << endl;
}
void onWalk(Animal* pSender){
cout << "Cat: 고양이가 걷는다" << endl;
}
};
//고양이
class Cat:public Animal{};
void main(){
Dog dog;
Cat cat;
dog.sound();
dog.walk();
CatDelegate cdel;
cat.setDelegate(&cdel);
cat.sound();
cat.walk();
getchar();
}
#ads_2