함수 포인터를 사용해서 콜백 함수를 생성할 수 있는 CallFunc 클래스를 만들어 보자. 원하는 기능MoveTo, RotateTo 같은 event가 완료 되었을 때 원하는 작업을 할 수 있도록 하고 싶다. 콜벡 이벤트를 만들어서 Sequence로 연결하여 사용하면 event가 끝나고 실행할 코드를 함수로 만들어서 사용할 수 있다. 클래스 구성EventManager- 모든 event클래스의 인스턴스들을 list로 관리한다. 리스트를 순회하며 종료된 event를 멈추고(Stop()) 삭제한다. Event- 모든 event의 최상위 클래스로 event의 추상적인 동작이 정의되어있다. 구체적인 event 클래스들은 이 클래스를 상속받는다. CallFunc- 콜백 함수를 등록할 수 있는 클래스. Event 클래..
개요sscanf는 c언어 레퍼런스 함수로, 제공된 버퍼에서 형식화된 자료형을 읽어오는 함수이다.함수의 원형은 다음과 같다. #include int sscanf(const char* str, const char* format, ...); 매개변수로 넘겨진 str문자열에서 format형식으로 데이터를 읽어서 가변인자들이 가리키는 메모리에 각각 저장한다. 가변인자로 전달하는 값은 읽은 데이터를 저장할 변수의 주소이다.// scanf를 사용할 때 scanf("%d %d", &i, &j); 처럼 쓰는 것과 같은 원리.사용하려면 다음 헤더를 추가해야 한다. C : C++ : Formatsscanf의 format으로 정할 수 있는 문자열은 다음과 같다. %[*][길이][한정자][데이터 타입] *읽기만 하고 무시. 길..
개요assert는 버그의 발생을 빠르고 쉽게 파악하기 위해 사용하는 매크로다. 이름에서 알 수 있듯 어떤 것을 단언하고 디버깅 중 참 거짓 검사를 통해 단언한 조건문이 거짓이 되면 에러 메세지를 띄우며 프로그램을 종료한다.assert 매크로는 릴리즈모드에서는 컴파일이 되지 않기 때문에 많이 써도 성능에 크게 영향을 주지 않는다. 현명하게 사용하면 버그없는(굉장히 적은) 프로그램을 만들 수 있겠다. 사용 방법assert를 사용하려면 다음 헤더를 추가해 주어야 한다. C : C++ : assert를 사용할 때 주의해야 할 점은 단언할 조건을 작성해야 한다는 것이다. 일반적인 논리에 따르면 참 일때 동작하는 코드들이 많지만 assert는 거짓일 때 동작하기 때문에 일어나면 안되는 조건이 아니라 꼭 일어나야 하..
개요C 또는 C++언어에서 함수의 매개변수를 가변적으로 전달하고자 하는 경우가 있다.그 경우의 수가 많지 않거나 가변적이지 않을 때는 함수 오버로딩으로 작성하여 해결할 수 있다. 함수의 매개변수로 int변수를 2~4개 받아야할 경우 void PrintInt(int a, int b); void PrintInt(int a, int b, int c); void PrintInt(int a, int b, int c, int d); 하지만 printf 또는 scanf 같은 함수처럼 몇개의 매개변수를 넘길지 그 경우가 가변적일 경우 가변인자를 사용한다. 가변인자가변인자는 ...으로 받을 수 있으며, ...에 전달된 매개변수들은 va_list로 저장되어 있고, va_list포인터로 접근할 수 있다. 함수로 전달되는 매..
namespace를 대충 알긴 하지만 한번도 제대로 써본 적이 없었다.실제 프로젝트에서도 사용할 수 있도록 namespace에 대해 더 알아보자. namespace 분할 컴파일namespace를 헤더에 정의해두고 전체 프로젝트에서 접근할 수 있도록 하려고 하니 header를 여러군데에서 include 했을 때 중복 정의되어 링크에러가 발생했다. 클래스가 선언과 정의를 분리하는 것처럼 namespace도 분리하여 구성하고 변수를 extern으로 설정하여 전역변수화 시키는 것으로 해결했다. // name2.hnamespace Name2{extern int a;void func();} // name2.cpp#include "name2.h" int Name2::a = 0; void Name2::func(){//..
게임 개발을 하다 보면 총알이나 파티클 등을 구현하기 위해 list 구조를 사용할 때가 있는데총알이나 파티클은 개수가 동적이기 때문에 메모리를 동적할당하여 구현한다. bullet을 구현한다고 할 때 아래처럼 구현할 수 있다. std::list _bullets; // 총알이 발사될 때 마다Bullet* bullet = new Bullet();_bullets.push_back(bullet); 나중에 필요에 의해 bullet을 삭제해야 한다면 그냥 erase()를 사용해서 삭제하면 메모리 누수가 일어난다.erase()는 동적할당한 메모리를 지우는 것이 아니라 해당 노드를 지우는 것이기 때문에 노드가 가리키는 메모리를 해제시키지 않는다. 따라서 아래처럼 삭제해야 한다. // 특정 노드를 삭제해야 한다면void ..
어떤 프로그래밍 책에서 #pragma instrinsic 명령으로 math.h 내에 있는 함수들의 속도를 향상시킬 수 있다는 내용을 읽었다 책에서는 그냥 instrinsic을 사용하면 속도가 향상된다고 쓰여 있었고 삼각함수를 빨리 구하기 위해 삼각함수 table을 사용하는 방법도 intrinsic(cos, sin, tan)을 하면 소용이 없다 라는 뉘앙스의 설명이 있었다 #pragma intrinsic이 대체 뭐길래 이런 마법같은 일을 하는 것일까 #pragma 명령 전저리기 명령. 사전에 컴파일러에게 명령을 내릴 수 있다. #pragma intrinsic 사용법 #pragma intrinsic(func1, func2, ...) 설명 인자 목록에 들어있는 함수를 컴파일러가 판단한 후 inline 또는 f..
코딩을 하면서, 다른사람의 코드를 보면서 nullptr을 참 많이 보고 썼는데 이게 무엇을 뜻하는 것이고 무엇을 할 수 있는지 정확히 모르고 있었다 nullptr이란? c++11에 추가된 키워드 null pointer를 가리킨다 생긴 이유 기존의 NULL이 0L이어서 포인터와 그냥 정수를 구분 하지 못하여 생기는 문제들을 보완하기 위해 만들어졌다 장점 void func(int val);void func(int *p); 위처럼 선언되어있는 두 함수가 있을 때 func(NULL); 으로 호출하면 int로 판정되어 첫번째 함수가 호출되었지만 nullptr을 사용하면 포인터로 판정되어 두번째 함수가 호출된다
- Total
- Today
- Yesterday
- C/C++
- C
- 드라마
- rxswift
- SOCKET
- Git
- mongoDB
- ue4
- machine learing
- 데이터베이스
- DesignPattern
- 수학
- Cocos2d-x
- 운영체제
- swift
- ios
- 알고리즘
- SHADER
- scala
- 국내여행
- Java
- game
- database
- C++
- OS
- SwiftUI
- Spring
- JSP
- winsock
- 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |