본문 바로가기

분류 전체보기48

C++ 프로그래밍 방법론 / 템플릿 메타 프로그래밍(TMP) C++에서는 템플릿에 어떠한 타입이 있는 값을 사용할 수 있고, 이를 통해서 컴파일 타임에 구성되는 어떠한 로직을 구성할 수 있다. 이런 방식의 프로그래밍을 템플릿 메타 프로그래밍이라고 한다. template struct Factorial { static const int result = N * Factorial::result; }; template struct Factorial { static const int result = 1; }; 재귀 함수의 예시로 가장 많이 사용되는 팩토리얼을 활용해서 예시를 구성하였다. 템플릿 특수화를 활용해서 1이 되었을 경우 result값으로 1을 정의하고, Factorial을 받았을 경우 지속적으로 result에 N * Factorial::result 값을 대입하도록 .. 2023. 2. 13.
C++ 프로그래밍 방법론 / 함수 객체 Functor struct add { int operator()(int a, int b) { return a + b; } } struct min { int operator()(int a, int b) { return a - b; } } 위 코드와 같이 어떠한 class 혹은 구조체의 연산자 ()를 오버로딩해서 해당 함수에 () 연산자를 적용할 수 있도록 해주는 것을 함수 객체(Functor)라고 한다. 실제 함수처럼 다음과 같이 호출할 수 있다. add(1, 2); // 결과값 : 3 min(3, 2); // 결과값 : 1​ 2023. 2. 13.
C++ 문법 / 템플릿 1. 개요 // 함수 템플릿 template T add(T a, T b) { return a + b; } // 클래스 템플릿 template class Number { public: T getNum() { return num; } private: T num; } 템플릿은 형틀에 무언가를 넣고 찍어내는 것처럼 소스 코드를 찍어낼 수 있게 해준다. 위의 예시 코드에서 사용되는 add함수를 int형 변수 a, b로 호출한다고 치면 컴파일러는 해당 함수를 아래와 같이 바꾸어서 컴파일한다. int add(int a, int b); 클래스의 경우도 똑같은 로직을 사용해서 컴파일하게 된다. 2. 템플릿 특수화 만약 템플릿을 사용하면서 특수한 자료형에 대해서 템플릿 특수화하고 싶다면 다음과 같이 사용한다. templa.. 2023. 2. 13.
C++ 표준 라이브러리 / 파일입출력 std::ifstream in("filename.txt");// 기본 : 텍스트 형식으로 읽음 std::ifstream in1("filename1.txt", std::ios::binary);// 데이터를 바이너리로 읽음 std::string s; // 문자열 하나하나 전부 받기 while(in) { char buf[100]; in.getline(buf, 100);// 100 count까지 읽기(but 문자열의 끝이 0이므로 // 거기까지밖에 못읽음. cout 2023. 2. 13.