using vs typedef

보물창고·2022년 8월 10일
0

c++ basic 코드누리

목록 보기
6/50
post-custom-banner
  • 코드누리와 cpp ref를 공부하고 복습, 정리한 내용임.

https://docs.microsoft.com/ko-kr/cpp/cpp/aliases-and-typedefs-cpp?view=msvc-170

using 과 typedef 를 사용하는 이유?240729

: 유저만의 타입을 정하는 것이다.

typedef 사용할 경우.

  • typedef를 template 바로 밑에 작성할 수 없다.

  • 아래의 예제처럼 template struct / class 내부에서는 typedef 를 사용할 수 있으나, 제약이 있다.
  • typedef 를 사용하기에는 using 보다 추가적으로 작성해야할 부분이 있음.
    : templtae에서 typedef를 꺼내서 사용할 때, 반드시 typename 을 명시해야 함.
    -> 왜냐하면 유저만의 타입을 지정하는 것인데, T값은 template으로부터
    종속적이기 때문에 template 타입소속에 있으므로, template만의 고유한 타입이다 라는 것을 의미한다.
  • 명시하지 않으면 오류 발생함.

template에서 teypdef 를 지정할 경우, template 에 의존적인 형식으로 정의된다고 함.
따라서 template 에 작성된 teypdef 별칭 타입을 타입 그대로 사용하기 위해서는 teypname 을 작성해야 한다.

using 사용할 경우.

  • typedef 사용하는 것보다는 용이함.
    -> 굳이 struct로 감쌀 필요도 없고,
    의존적인 타입을 지칭하는 typename을 작성할 필요도 없다.

using, typedef

: 타입에 대한 별칭을 정의할 때 사용함.

왜 사용하는 걸까?

: 궁극적으로는 유저가 원하는 타입을 만들기 위해서다.

  • 1) 이름이 긴 객체나 반복적으로 사용하는 이름이 긴 타입을 사용하기
    귀찮을 때
  • 2) 타입의 이름을 간결하고 명확히 하기 위함.

    unsinged int -> using UINT = unsigned int;
    이렇게 선언하면, UINT 만으로 사용 가능함.

자주 사용되는 shared_ptr< BundangDong > 을 별칭하면,
using Bundang = shared_ptr< BundangDong >;
Bundang 으로 쉽게 타입 지정이 가능함.

problem

using 으로 int를 INT로 별칭만들고, 변수 a만들고, 타입 추출하라.
typeid로 double을 DOUBLE로 별칭 만들고, 변수 d 만들고, 타입 추출하자.

  • using의 경우 : 템플릿에서의 별칭도 만들 수 있음.

선언하는 방법.
using 별칭 타입
typedef 타입 별칭.

중요

  • using f = void(*)(int, int) 에서 반환값이 포인터가 아니라, 함수의 주소를
    참조할 수 있는 함수포인터 형식이라는 것을 의미함.
  • typedef로는 이렇게 표현함. typedef void(*f)(int, int)
    -> 그니까 뭔소리냐면, 함수의 시그니처 형식을 저장한다는 의미임.

예제

: 아래의 그림을 함수 포인터를 별칭으로 만든 것일 뿐이고,
함수를 만들때 직접접으로 사용을 할 수 없음.

  • 이런식으로는 함수를 만들 수 없음.

  • 결론
    -> 함수의 시그니처만 동일하면 함수포인터는 어떤 함수든지 참조가 가능함.

using 과 typedef 의 차이

  • 그림 : using으로 template 별칭 만들기
    -> template 내부에서 typedef를 사용할 수 없음!

  • typedef로 별칭을 만들수 없다는 것이 아님.
    -> 가능함.

profile
🔥🔥🔥
post-custom-banner

0개의 댓글