1. template
template <typename T>
원하는 타입을 넣어주면 알아서 변형
>
Vector<int> int_vec;
Vector<std::string>
: 활용
2. C++ 기본처리단위 : 1byte
<> bool : 1bit
>
Vector<bool> 따로 처리
>>
템플릿 특수화 (template specialization)
template <>
class Vector<bool>
data(new unsigned int[n / 32 + 1]), capacity(n / 32 + 1), length(0)
int 형으로 생성한 공간에 bool 로 채우면
4byte = 32bit 즉, 32개의 bool
3.
bool operator[](int i) { return (data[i / 32] & (1 << (i % 32))) != 0; }
비트 and 연산 후 0이 아니라면 return 1
" " return 0
// AND 연산 : 값 보존 > 1
: 초기화 (0) > 0
함수 템플릿 (Function template)
함수 객체 (Functor): 함수인척 하는 객체
> 함수 인자로도 넘길수있음
폴드형식
return (... + nums);
// 9.3장
template <typename T>
int func() {
T::t* p;
}
class A {
const static int t;
};
class B {
using t = int;
};
class A : t는 int 형 변수 t > func() > T::t 곱하기 p
class B : t 는 int 형 타입 > func() > T:: int* p
>
struct check_div<N, typename divide<N, two>::result> {
typename > result 는 타입 형태야 라고 알려줘야함 // result 가 값일때는 X
단위(Unit) 라이브러리
: C++ 의장점 : 여러 단위의 수치 계산
template <typename T, typename D>
struct quantity {
T q;
using dim_type = D;
quantity operator+(quantity<T, D> quant) {
return quantity<T, D>(q + quant.q);
}
quantity(T q) : q(q) {}
};
quantity operator+(quantity<T, D> quant) {
return quantity<T, D>(q + quant.q);
}
//1
quantity<double, Dim<one, zero, zero>> kg(1);
//2
kg + kg;
1.
quantity<double, Dim<one,zero,zero>> 타입의 객체 kg(1) 생성 즉, kg.q == 1.0
2. kg + kg == kg.operator+(kg)
// 오른쪽 kg 은 quant의 타입: quantity<double, Dim<one,zero,zero>>
즉 왼쪽과 우측의 타입 일치
q + quant.q == 2.0
> return quantity<T, D>(2.0);