템플릿 컴파일

김대익·2022년 3월 11일

template instantiation

multiple type parameters

template<typename IT, typename T> 
  IT find(IT first, IT last, const T& value) {
    while (first != last) {
    	if (*first == value) {
        	return first;
        }
        first++;
    }
    return last;

위 예제 코드는 find에 대한 template function이다
위처럼 여러 인수를 받을 수 있다.


non type parameter

template<typename T, std::size_t N>
T foo(T a) {
	return N*a;
}

int main() {
	std::cout << foo<double, 4>(2.0) << std::endl;
    std::cout << foo<double, 5>(2.0) << std::endl;
    
    return 0;
}

출력하면

이처럼 type이 아닌 형태도 인수로 받을 수 있다.


parameter pack

가끔 이런 형식의 코드도 볼 수 있는데

template <typename ...T>
void foo(T && ...args) {
	(std::cout << ... << args) << '\n';
}

int main() {
	foo(1, 2, 3);
	foo("ABC", "nocope");
    
    return 0;
}

c++17부터 이렇게 ...을 이용하면 인수의 개수를 유연하게 정할 수 있다.


main.cpp에 템플릿 함수 foo의 declaration만 들어있는 foo.h를 include하고
foo.cpp에서 implementation되어있다면
main.cpp는 컴파일이 되지않는다.


그래서 헤더파일에 implementation까지 몰아넣는 것이 일반적이다.

0개의 댓글