Program Tip

C ++에서 템플릿 변수가있는 구조체

programtip 2020. 11. 29. 12:11
반응형

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합니까? 또한 typedefafter 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

반응형