여러 템플릿

김대익·2022년 3월 11일

class template

#include <vector>

int main() {
	std::vector<int> ints;
    std::vector<double> doubles;
    std::vector<Cat> cats;
    
    return 0;
}

vector처럼 여러 타입을 받을 수 있는 클래스는 클래스 템플릿으로 정의된다.

#include <vector>

template<typename T>
class Stack {
public:
	void push(T elem) {
    	mVec.emplace_back(std::move(elem));
    }
    bool pop(T& elem) {
    	if (mVec.size() == 0) {
        	return false;
        }
        elem = mVec[mVec.size() - 1];
        mVec.pop_back();
        return true;
    }
private:
	std::vector<T> mVec;
}

int main() {
	Stack<int> stack;
    
    stack.push(1);
    stack.push(2);
    stack.push(3);
    
    int n;
    while (stack.pop(n)) {
    	std::cout << n << std::endl;
    }
    
    return 0;
}

이런 식으로 function뿐만 아니라 class도 가능하다


aliasing template

c++ 11전에는 typedef를 사용했지만 이후부터는 aliasing을 쓰는 것을 추천한다

#include <iostream>

int main(int argc, char const *argv[]) {
	using myType = std::vector<std::array<uint8_t, 64>>;
    
    myType a{10};
}

aliasing은 이런식으로 이름이 길고 복잡할 경우 사용한다.

aliasing template은

aliasing과 같지만 위와 같이 컴파일 시간에 타입을 정해줄 수 있게 해준다.


variable template

c++ 14부터 추가된 템플릿으로


정의한 변수를 원하는 타입으로 받을 수 있게 해준다.
output stream의 precision이 default 6으로 되어있기 때문이다.

0개의 댓글