Programming Languages(81)
-
템플릿 메타프로그래밍
7.5 템플릿 메타프로그래밍템플릿 메타프로그래밍(TMP)은 C++ 템플릿 시스템을 사용하여 컴파일 시간에 계산을 수행하는 기법입니다:#include #include // 컴파일 시간 팩토리얼 계산template struct Factorial { static constexpr int value = N * Factorial::value;};// 재귀 종료 조건template struct Factorial { static constexpr int value = 1;};// 컴파일 시간 제곱 계산template struct Power { static constexpr int value = N * Power::value;};// 재귀 종료 조건template struct Power { sta..
2025.03.28 -
가변 템플릿(Variadic Templates) (C++11)
7.4 가변 템플릿(Variadic Templates) (C++11)C++11에서는 가변 개수의 템플릿 매개변수를 처리할 수 있는 가변 템플릿이 도입되었습니다:#include #include // 재귀 종료 조건: 매개변수가 없는 경우void print() { std::cout void print(T first, Args... args) { std::cout 0) { std::cout T sum(T value) { return value;}// 가변 매개변수 버전template T sum(T first, Args... args) { return first + sum(args...);}// 가변 템플릿 클래스template class Tuple;// 빈 Tuple 특수화..
2025.03.28 -
비타입 템플릿 매개변수
7.3 비타입 템플릿 매개변수템플릿 매개변수는 타입뿐만 아니라 상수 값도 될 수 있습니다:#include #include // 비타입 템플릿 매개변수를 사용한 고정 크기 배열template class FixedArray {private: T data[Size]; public: // 기본 생성자 FixedArray() { for (size_t i = 0; i init) { size_t i = 0; for (const T& val : init) { if (i = Size) { throw std::out_of_range("인덱스가 범위를 벗어났습니다."); } return data[in..
2025.03.28 -
클래스 템플릿 기초
7.2 클래스 템플릿 기초7.2.1 클래스 템플릿의 개념클래스 템플릿은 다양한 데이터 타입에 대해 동일한 클래스 구조를 제공합니다:#include // 클래스 템플릿 정의template class Box {private: T content; public: // 생성자 Box(const T& item) : content(item) {} // 내용물 설정 void setContent(const T& item) { content = item; } // 내용물 반환 T getContent() const { return content; } // 내용물 출력 void printContent() const ..
2025.03.28 -
템플릿
템플릿템플릿은 C++의 가장 강력한 기능 중 하나로, 타입에 독립적인 코드를 작성할 수 있게 해줍니다. 템플릿을 사용하면 다양한 데이터 타입에 대해 동일한 알고리즘이나 클래스를 하나의 코드로 구현할 수 있어, 코드 재사용성과 유지보수성을 크게 향상시킬 수 있습니다.7.1 함수 템플릿 기초7.1.1 함수 템플릿의 개념함수 템플릿은 다양한 데이터 타입에 대해 동작하는 함수의 "청사진"을 정의합니다. 실제 함수는 컴파일러가 템플릿으로부터 필요한 타입에 맞게 생성합니다.#include // 두 값 중 최대값을 반환하는 함수 템플릿template T max(T a, T b) { return (a > b) ? a : b;}int main() { // 정수형에 대한 호출 int iResult = ma..
2025.03.28 -
챕터6. 실습 문제
6.6 실습 문제문제 1: 동적 메모리를 사용한 간단한 문자열 클래스#include #include class MyString {private: char* buffer; size_t length; public: // 기본 생성자 MyString() : buffer(nullptr), length(0) { buffer = new char[1]; buffer[0] = '\0'; } // 매개변수가 있는 생성자 MyString(const char* str) : buffer(nullptr), length(0) { if (str) { length = strlen(str); buffer = ..
2025.03.28