Я играю вокруг с шаблонами. Я не пытаюсь переосмыслить станд.:: вектор, я пытаюсь получить схватывание templateting в C++.
Я могу сделать следующее?
template <typename T>
typedef struct{
size_t x;
T *ary;
}array;
То, что я пытаюсь сделать, является основной шаблонной версией:
typedef struct{
size_t x;
int *ary;
}iArray;
Похоже, что это работает, если я использую класс вместо структуры, также - разве это не возможно со структурами определения типа?
Проблема в том, что вы не можете создать шаблон для typedef, а также нет необходимости создавать структуры typedef в C ++.
Следующее сделает то, что вам нужно
template <typename T>
struct array {
size_t x;
T *ary;
};
Вы можете создать шаблон как для структуры, так и для класса. Однако вы не можете создать шаблон для typedef. Итак, template
работает, но template
- нет. Обратите внимание, что в C ++ нет необходимости в уловке typedef (в C ++ вы можете использовать структуры без модификатора struct
).
Стандарт говорит (14/3. Для нестандартных людей имена, следующие за телом определения класса (или типом в объявлении в целом), являются «деклараторами»)
В объявлении шаблона, явная специализация или явное создание экземпляра init-declarator-list в декларации должен содержать не более одного декларатора. Когда такое объявление используется для объявления шаблона класса, использование декларатора не допускается.
Делайте так, как показывает Андрей.
Вам не нужно делать явный typedef
для классов и структур. Для чего вам нужен typedef
? Кроме того, typedef
после template<...>
синтаксически неверно. Simply use:
template <class T>
struct array {
size_t x;
T *ary;
} ;
template <typename T>
struct array {
size_t x;
T *ary;
};
Судя по другим ответам, проблема в том, что вы шаблонизируете типдеф. Единственный "способ" сделать это - использовать шаблонизированный класс; то есть, базовое метапрограммирование шаблонов.
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
}
}