Типовое имя шаблона - PullRequest
       25

Типовое имя шаблона

0 голосов
/ 21 ноября 2011

Указывает ли C++ standard каким-либо образом, что может быть T в следующем объявлении:

template <typename T>

Я имею в виду, с практической точки зрения, это может быть любой конкретный тип, который позволяет шаблонускомпилировать (когда происходит соответствующее замещение) .

Но как насчет строгого определения?

Ответы [ 4 ]

2 голосов
/ 21 ноября 2011

Как вы хотите, стандарт, вот он:

C ++ 03, 14.1, Параметры шаблона:

A template defines a family of classes or functions.

template-declaration:
    exportopt template < template-parameter-list > declaration
template-parameter-list:
    template-parameter
     template-parameter-list , template-parameter

template-parameter:
    type-parameter
    parameter-declaration
type-parameter:
    class identifieropt
    class identifieropt = type-id
    typename identifieropt
    typename identifieropt = type-id
    template < template-parameter-list > class identifieropt
    template < template-parameter-list > class identifieropt = id-expression

..

Параметр типа определяет свой идентификатор как имя типа (если оно объявлено с помощью class или typename) или имя шаблона (если оно объявлено с шаблоном) в области действия объявления шаблона.

..

Если использование шаблона-аргумента приводит к неправильной конструкции при создании шаблона специализации, программа является плохо сформированной.

Другое относится к параметрам по умолчанию, нетиповым шаблонам и т. Д. Другими словами, стандарт не говорит что-либо о T.

1 голос
/ 21 ноября 2011

Программист несет ответственность за совместимость типа данных, используемого для T, и имеет все необходимые операции, которые будут выполняться для T.Что касается стандарта C ++, то вместо T можно использовать любой тип данных.

0 голосов
/ 02 сентября 2013

boost имеет полезный шаблон enable_if, который позволяет включать шаблоны только для определенных типов.

0 голосов
/ 21 ноября 2011

Не существует строгого определения, так как это, похоже, идет вразрез с самой целью шаблонов.T - это любой тип, который, например, передается в качестве аргумента функции с параметром типа T.

Вы жертвуете безопасностью строгих определений типов для повторного использования кода шаблонами.Имея эту свободу, вы должны предоставить проверки, чтобы убедиться, что T имеет разумный тип для функции.

...