[C++] CTAD(Class Template Argument Deduction)
Updated:
개요
- 템플릿 클래스 객체 생성 시 타입을 명시하지 않아도 컴파일러가 자동으로 템플릿 인자 타입을 추론
- 컴파일러가 템플릿 인자 추론 시 참조할 가이드를 제공 가능
예제
- 코드
#include <iostream> #include <string> #include <typeinfo> using namespace std; template <typename T> class Test1 { public: Test1(T t) { cout << typeid(t).name() << endl; } }; template <typename T> class Test2 { public: Test2(T t) { cout << typeid(T).name() << endl; } Test2(T t1, T t2) { cout << typeid(T).name() << endl; } }; Test2(const char *)->Test2<string>; template <typename T, typename U> Test2(T, U) -> Test2<U>; int main() { // C++14 Test1<const char *> t1{"a"}; Test1<string> t2{"a"}; cout << "------" << endl; // C++17 Test1 t3{"a"}; Test2 t4{"a"}; Test2 t5{1, 1.1}; return 0; }
- 실행 결과
PKc NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE ------ PKc NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE d