본문 바로가기

언어/C++12

(C++)STL STL(Standard Template Library)는 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리이다. STL의 구성요소 - 컨테이너 : 객체들을 저장하는 객체 - 반복자 : 컨테이너의 원소를 가리키고 STL내의 자료구조와 알고리즘을 연결시킴 - 알고리즘 : 정렬, 삭제, 연산 등을 해결하는 함수 템플릿 - 함수 객체 : 함수처럼 동작하는 객체. (less(), greater()) - 어댑터 : deque의 인터페이스를 변경해 stack으로 만든것처럼 기존의 구성요소의 인터페이스를 변경해 새로운 구성요소로 만드는것 - 할당기(Allocator) : 컨테이너의 메모리 할당 정책을 캡슐화한 클래스 컨테이너 - 시퀀스 컨테이너 : vector, deque, list처럼 원소가 삽입되는 순서에 따라 .. 2020. 9. 14.
(C++) 템플릿 템플릿은 함수나 클래스에서 실행 시 받는 타입별로 따로 구현해놓지 않아도 임의의 타입에 맞게 자동으로 구현되는 기능이다. 템플릿의 과정 컴파일이 시작되면 구체적 타입에 맞게 템플릿 인스턴스가 생성 된다. 이 과정은 단순 코드의 복사 붙여넣기와 동일하며 RunTime에 타입을 변화시켜주는 자바의 제네릭과는 확실히 다르다. virtual 같은 동적 바인딩과도 다른것이다. 특수화 템플릿 특수화 템플릿은 특정한 타입만의 예외를 제공해주는 템플릿이다. 특수화 시 지켜야 할점이 있는데 매개변수와 리턴값의 타입을 똑같이 맞춰줘야 한다. template void test(T data) { std::cout 2020. 9. 14.
(C++)함수 호출 규약 함수 호출 규약은 함수 호출 시 전달되는 인자의 순서나 함수가 종료될 때 함수의 스택을 정리하는 시점 등을 약속한 것이다. 대표적인 함수 호출 규약으로 stdcall, thiscall, fastcall 등이 있다. 기본 정적 함수 호출규약은 cdecl이고 멤버함수는 thiscall을 사용한다. cdecl, stdcall, fastcall 이 3가지 함수 호출 규약을 비교해 보도록 하겠다. cdecl stdcall fastcall 인수 호출 방향 오른쪽 -> 왼쪽 오른쪽 -> 왼쪽 오른쪽 -> 왼쪽 인수 전달 매체 스택 스택 레지스터와 스택 스택프레임 정리 주체 호출자 호출 받는쪽 호출받는쪽 cdecl의 경우 c와 c++의 표준 규약이고 printf와 같은 가변인자를 받기 위해 만들어졌다. 가변인자이기에 .. 2020. 7. 13.
(C++)함수 포인터와 콜백함수 함수 역시 메모리의 시작 주소값을 가진다. 그래서 변수처럼 함수의 주소값을 가지는 포인터를 가질 수 있는데 이를 함수포인터 라고한다. int Function(int a) { printf("%d", a); return a; } int main() { //함수 포인터 생성 int(*Fp)(int); //포인터에 함수 대입 Fp = Function; //함수 호출 Fp(10); (*Fp)(10); } 위의 코드와 다르게 함수가 어떤 클래스의 멤버함수인 경우엔 void (FClass::*Fp)(int)처럼 선언한다. 함수포인터를 이용한 콜백 메커니즘 대표적인 콜백함수를 구현하는 방식으로 함수포인터를 넘겨주는 방법이 있다. //클라1 void Print1(int n) { cout 2020. 7. 13.