주의 : 공부하면서 정리한 내용이므로 오류가 있을 수 있습니다.


C++ Template Metaprogramming 책의 [ 3.2. 고차 메타함수들 ] 을 보면 다음과 같은 문장이 있다.


메타함수들을 "일급( first-class ) 메타자료" 로 만듦으로써, transform 으로 거의 무한하게 다양한 연산들( 앞의 예에서는 곱하기와 나누기 )을 수행할 수 있게 된다.


여기에서 first-class metadata 의 용어 설명이 제대로 나와 있지 않다. 그래서 googling 을 해 봤는데도 제대로 된 용어 설명을 찾을 수 없었다.


그런데 googling 을 하다가 보니 비슷한 용어 설명을 찾을 수 있었다.


What is 'first class object'?


first-class object 는 동적으로 생성, 파괴될 수 있거나 인자로 넘겨질 수 있는 것을 의미한다.


예를 들어, 모든 C++ 의 object 들도 first-class object 이다. 그것들은 생성자나 소멸자 메서드를 사용해서 생성되거나 파괴될 수 있으며, 함수의 인자로서 전달될 수 있다. 그러나 C++ 의 함수와 메서드는 first-class 가 아니다. 왜냐하면 그것들은 실시간에 생성될 수 없기 때문이다.


많은 함수적 언어( functional language )에서 함수는 first-class object 이다. 왜냐하면 그것들은 다른 함수의 인자로서 넘겨질 수 있으며 런타임에 동적으로 생성되기 때문이다.


C++ 에서 class 는 first-class 가 아니다 -- 일부 언어에서( 예를 들어 LISP 의 CLOS ) 그것들이 first-class 임에도 불구하고 말이다( 왜냐하면 그 언어들에서는 class 가 object 이다 ).


출처 : http://www.catalysoft.com/definitions/firstClassObject.html


위의 설명으로 보았을 때, meta function 이 meta function class 에 대한 직접적인 정의 없이 placeholder 기능을 통해서 meta function 의 parameter 로 취급될 수 있는 상황을 가리키는 것 같다. 즉 placeholder 는 meta function 을 meta function class 와 같은 first-class object 로 변환해 주는 역할을 하는 것이다.



+ Recent posts