C++/모두의코드

9장

러비코스믹 2025. 2. 12. 10:15

 

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);

 

'C++ > 모두의코드' 카테고리의 다른 글

10.3  (0) 2025.03.03
10장  (0) 2025.02.18
8-1 장  (0) 2025.02.09
7장  (0) 2025.02.04
6장  (0) 2025.02.02