템플릿
-
포인터의 타입 추론개발/C·C++ 2024. 8. 31. 12:31
templatevoid f(T* param){ cout f() 함수는 T*으로 인수를 받고 있다. const int*로 선언된 pcx 변수를 전달하면 어떤 타입으로 추론이 되는지 살펴본다. 답을 보기 전에 가능한 시나리오를 검토해보자.pcx는 const int*이니까 T는 const int가 될 수도 있고 모종의 이유로 const가 탈락한 int가 될 수도 있다. 혹은 T* 이므로 해당 타입이 가리키는 타입으로 추론될 수도 있을 것이다. 정답은 아래를 드래그 하면 된다. int 예상 가능한 시나리오의 세 번째에 해당한다고 볼 수 있다.T*은 해당 포인터 변수가 가리키는 타입을 추론한다. int형 가리키기 때문에 int로 추론된다.그렇다면 f() 함수의 파라미터가 T이면 어떨까?#include #in..
-
[template] 템플릿 특수화개발/C·C++ 2021. 5. 1. 13:12
템플릿은 기본적으로 일반화 프로그래밍(generic programming)을 위해 사용하지만 경우에 따라서는 다른 동작을 해야 한다거나 타입에 따라 효율성을 위해 구현을 달리 해야 하는 상황이 일어날 수 있습니다. STL 중에는 vector가 bool 타입에 대해서만 특수화가 되어 있죠. 템플릿 특수화는 함수에도 사용할 수 있고 클래스에도 사용할 수 있습니다. 먼저 함수를 살펴보겠습니다. 특수화에는 완전 특수화와 부분 특수화가 있는데, 완전 특수화는 타입을 구체적으로 명시하는 것을 말합니다. 특수화를 할 때는 일반적으로 만들어놓은 템플릿의 형식을 벗어나면 안 됩니다. 다르게 하면 그냥 다른 함수가 되는 것입니다. #include using std::cout; using std::endl; class Cl..
-
[template] 함수 템플릿(function template)개발/C·C++ 2021. 4. 30. 20:29
클래스 자체는 객체가 아니듯이 함수 템플릿은 함수가 아닙니다. 함수를 만들어내는 형판 같은 것입니다. template이라는 키워드는 일반화 프로그래밍을 하게 해줍니다. 영어로는 generic programming이라고 합니다. 객체 지향을 명확하게 몇 가지 문장으로 정의하기 어렵듯이 일반화 프로그래밍도 비슷합니다. 좁은 범위에서는, 특정 타입에 얽매이고 다양한 타입에 대응할 수 있는 프로그램을 작성하는 것, 정도로 생각할 수 있습니다. 다음 예제에서 함수 템플릿을 확인해보겠습니다. template void swap(T& x, T& y) { T temp = x; x = y; y = temp; } int main() { int x = 20, y = 30; //swap(x, y) // explicitly(in..