C ++에서 템플릿 변수가있는 구조체
나는 템플릿을 가지고 놀고있다. 나는 std :: vector를 재발 명하려는 것이 아니라 C ++로 템플릿 화를 이해하려고 노력하고 있습니다.
다음을 할 수 있습니까?
template <typename T>
typedef struct{
size_t x;
T *ary;
}array;
내가하려는 것은 다음의 기본 템플릿 버전입니다.
typedef struct{
size_t x;
int *ary;
}iArray;
구조체 대신 클래스를 사용하면 작동하는 것처럼 보이므로 typedef 구조체에서는 가능하지 않습니까?
문제는 typedef를 템플릿으로 만들 수 없으며 C ++에서 typedef 구조체를 사용할 필요가 없다는 것입니다.
다음은 필요한 작업을 수행합니다.
template <typename T>
struct array {
size_t x;
T *ary;
};
template <typename T>
struct array {
size_t x;
T *ary;
};
typedef
클래스와 구조체에 대해 명시 적 작업을 수행 할 필요가 없습니다 . 당신은 무엇을 위해 필요 typedef
합니까? 또한 typedef
after a template<...>
는 구문 상 잘못되었습니다. 간단히 사용 :
template <class T>
struct array {
size_t x;
T *ary;
} ;
구조체와 클래스를 템플릿으로 만들 수 있습니다. 그러나 typedef를 템플릿 할 수는 없습니다. 그래서 template<typename T> struct array {...};
작동하지만 template<typename T> typedef struct {...} array;
그렇지 않습니다. C ++에서는 typedef 트릭이 필요하지 않습니다 (C ++에서는 struct
수정 자 없이 구조체를 사용할 수 있습니다 ).
표준에 따르면 (14/3에서. 비표준 사용자의 경우 클래스 정의 본문 (또는 일반적으로 선언의 유형)을 따르는 이름은 "선언자"입니다.)
템플릿 선언, 명시 적 전문화 또는 명시 적 인스턴스화에서 선언의 init-declarator-list는 최대 하나의 선언자를 포함해야합니다. 이러한 선언이 클래스 템플릿을 선언하는 데 사용되면 선언자가 허용되지 않습니다.
Andrey 쇼처럼하십시오.
다른 답변에서 문제는 typedef를 템플릿하고 있다는 것입니다. 이를 수행하는 유일한 "방법"은 템플릿 클래스를 사용하는 것입니다. 즉, 기본 템플릿 메타 프로그래밍.
template<class T> class vector_Typedefs {
/*typedef*/ struct array { //The typedef isn't necessary
size_t x;
T *ary;
};
//Any other templated typedefs you need. Think of the templated class like something
// between a function and namespace.
}
//An advantage is:
template<> class vector_Typedefs<bool>
{
struct array {
//Special behavior for the binary array
}
}
구문이 잘못되었습니다. 는 typedef
제거해야합니다.
참고 URL : https://stackoverflow.com/questions/2448242/struct-with-template-variables-in-c
'Program Tip' 카테고리의 다른 글
TLS와 함께 요청을 사용하면 SNI 지원이 제공되지 않습니다. (0) | 2020.11.29 |
---|---|
TensorFlow-L2 손실이있는 정규화, 마지막 가중치가 아닌 모든 가중치에 적용하는 방법은 무엇입니까? (0) | 2020.11.29 |
데이터 프레임에서 열을 정렬하여 그룹 (사 분위수, 십 분위수 등)을 빠르게 형성하는 방법 (0) | 2020.11.29 |
Xcode가 이전에 열린 프로젝트를 자동으로 열지 않도록하는 방법 (0) | 2020.11.29 |
해시 할 해시 배열 (0) | 2020.11.29 |