C++17 함수 템플릿 #001 함수 템플릿 (Function Templates) 함수 템플릿은 다양한 타입(type)에 대해 호출될 수 있는 어떠한 함수적인 동작을 제공한다. 함수의 일부 요소가 파라미터화(parameterized)되어 정해지지 않았다는 점을 제외하면 일반적인 함수와 거의 같다. 다음은 두 값 중에서 큰 값을 반환하는 함수 템플릿이다. /* max1.hpp */ template T max(T a, T b) { return b < a ? a : b; } 이 함수 템플릿의 정의는 함수 파라미터(parameter)로 전달된 a와 b라는 두 값 중에서 큰 값을 나타내는 함수들의 모임을 나타낸다. 함수 파라미터의 타입은 템플릿 파라미터(template parameter) T로 아직 정해지지 않은..
C++가 C언어를 포함한다고 오해하는 분들이 많습니다. 이는 사실과 다릅니다. 비록 C++은 C언어에 기능을 덧붙이는 것에서 시작했지만 현재의 표준안은 차이가 있습니다. 우선 정의를 하고 시작하겠습니다. ISO C (이하 C)는 ISO/IEC 9899:2011입니다. C++은 ISO/IEC 14882:2017입니다. 흔히 C++17라고도 합니다. ISO/IEC 9899:2011은 흔히 C11이라 부르는데 가장 표준적으로 사용하는 ISO/IEC 9899:1999 (이하 C99)에 여러 기능을 덧붙인 것입니다. 실무에서는 별로 사용하지 않는 것 같습니다. 현재(2020년 02월 16일)는 ISO/IEC 9899:2018이 가장 최신 표준이나 C11에 대한 새로운 기능 추가가 없습니다. 이 글은 C++17 표..
많은 사람들이 C++은 객체 지향형 언어라고 알고 있습니다. 이는 틀린 말이 아닙니다. 분명히 C++은 C언어에 여러 가지 요소들을 덧붙여서 객체 지향 패러다임을 구현했습니다. 하지만 설계자들이 처음부터 고려해서 만들지 않은 숨겨진 기능도 있습니다. 지금부터 알아볼 내용은 바로 그 숨겨진 기능입니다. 템플릿(template)은 일반적으로 일반화 프로그래밍(generic programming)을 지원하기 위해서 만들어진 것으로 배웁니다. 곧 타입(type)을 정하지 않고 컴파일 도중에 템플릿 매개변수에 적절한 타입을 집어넣어서 바이너리를 만듭니다. 그런데 조금 더 배우신 분들이나 표준 라이브러리의 std::array를 사용해보신 분들은 템플릿 매개변수에는 타입 외에도 정수형, 열거형, 함수 및 전역 객체에..