#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도 가능하다
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과 같지만 위와 같이 컴파일 시간에 타입을 정해줄 수 있게 해준다.
c++ 14부터 추가된 템플릿으로


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