클래스 템플릿은 하나 이상의 템플릿 매개 변수를 기반으로 일련의 클래스를 정의하는 템플릿입니다. 함수 템플리트는 하나 이상의 템플리트 매개 변수를 기반으로 일련의 함수를 정의하는 템플리트입니다. vector
은 템플릿 클래스입니다. vector<int>
은 해당 템플릿에서 인스턴스화 된 특정 클래스입니다.
template<typename T>
T variable_name{};
가변 템플릿이다
가변 템플릿은 하나 개 이상의 템플릿 파라미터에 기초 변수 시리즈를 정의하는 템플릿, 따라서이다. 다른 템플릿과 마찬가지로 원하는 템플릿을 지정할 수 있습니다. variable_name<int>
은 int
입니다. variable_name
은 템플릿입니다. variable_name<int>
은 실제로 변수입니다.
물론, 당신은 더 복잡한 일을 수행 할 수 있습니다
template<typename T>
vector<T> vector_var{};
vector_var<int>
가 vector<int>
이다.
변수 템플릿은 namespace/global 범위 및 클래스의 정적 멤버로만 제공 될 수 있습니다. 네임 스페이스/전역 범위에서 이들은 보통 constexpr
(및/또는 C++ 17, inline
)으로 선언됩니다. 그들은 상수를 만들기위한 유용하다 : 당신이 뭔가 기본 작도 경우 말하고 싶은 경우
template<typename T>
inline constexpr bool is_default_constructible_v = std::is_default_constructible<T>::value;
그래서, 당신은 약간 어색한 ::value
구문이 필요하지 않습니다.
가변 템플릿은 C++ 14 기능이므로 컴파일러에서 아마도 C++ 11 모드에서 사용하도록 경고했을 것입니다.
image<T> *im = new image<T>(w, h, false);
이
하지 변수 템플릿
입니다. 이것은 형식이 매우 잘 정의 된 정규 변수입니다 (image<T>
). 정확히 하나의 변수 "im
"이 있습니다. 변수를 얻으려면 im<T>
을 사용하지 마십시오. 이 문은 변수 집합을 정의하지 않습니다. 당신이 가지고있는 가족은 입니다.이고, 각각 에는이라는 변수와 im
이라는 변수가 있습니다. 이 함수는 변수가 아니라 템플릿입니다.
여기에 [변수 템플릿] (http://en.cppreference.com/w/cpp/language/variable_template)이 있습니다. [cppreference.com] (http://en.cppreference.com/w/). – Ron
나는이 사이트를 보았고 특별히 도움이되지 않았다. 그것은 "변수 템플릿 변수 또는 정적 데이터 멤버의 가족을 정의합니다." 몇 가지 예가 있습니다. 내 예제의 코드는 나에게 cppreference에 대한 정의의 제한된 정보를 기반으로하는 추가 예제로 보입니다. 왜 그렇지 않은가? – Scott
이것은 변수 템플릿처럼 보이지 않습니다. 멤버 함수 템플릿과 비슷합니다. – VTT