[Basic] Object Generator

Program Lang./C++ 2017. 7. 9. 10:48

1. 목적

Object Generator 정의는 다음과 같다. 함수 탬플릿으로 클래스 탬플릿의 객체를 생성하는 기술. 정의만으로는 이 기술이 얼마나 멋진지 와 닿지 않는다. 아래 소스 코드를 이용해서 설명을 진행하도록 한다.


2. 소스코드

아래 코드의 예제는 make_tuple의 동작을 알아보기 위해서 make_tuple과 유사 동작을 하는 xmake_tuple을 만들어 보았다.



tuple을 print하는 help function은 일단 무시한다. 우리가 tuple 객체를 생성하는 방법은 아래와 같이 두가지 방식이 있다. 일반 클래스 객체를 선언하기 위한 방법과 동일하게 tuple template에 type 정보를 주고 각 type에 해당하는 argument를 주는 방식이다. 두 번째 방법은 tuple에서 제공하는 make_tuple() 함수를 이용해서 tuple 객체를 생성하는 것이다.


그럼 첫번째 방식과 두 번째 방식의 차이는 무엇인가? 여러가지 차이가 있지만 여기서는 Object Generator 관점에서 살펴본다.


두 번째 방식은 함수 템플릿은 암시적/명시적 객체 인스턴스화가 가능한 반면, 클래스 탬플릿은 명시적인 객체 인스턴스만 가능하다. C++17부터는 클래스 탬플릿도 암시적 객체 인스턴스화가 가능하지만, 이는 논외로 한다.

make_tuple() 함수를 통해서 명시적 Type을 지정하지 않고 Argument로 전달된 객체의 타입으로 tuple의 객체 인스턴스화가 가능하다. 즉 함수 탬플릿의 암시적인 객체 생성 기법을 이용해서 클래스의 명시적 객체 생성이 가능한 것이다.



3. 결론

C++ 표준에는 함수 탬플릿의 암시적 객체 생성 기법을 통해서 클래스 탬플릿의 명시적 객체 생성을 할 수 있는 함수들을 많이 제공하고 있다. 이는 Object Generator 기법에 그 근간이 있다.


: