Информация об изменениях

Сообщение Re[2]: Функция, принимающая вложенный класс шаблонного класс от 04.04.2024 18:13

Изменено 04.04.2024 20:05 rg45

Re[2]: Функция, принимающая вложенный класс шаблонного класс
R>https://timsong-cpp.github.io/cppwp/n4861/temp.deduct.type#8

R>
R>T
R>cv T
R>T*
R>T&
R>T&&
R>T[integer-constant]
R>template-name<T>  (where template-name refers to a class template)
R>type(T)
R>T()
R>T(T)
R>T type::*
R>type T::*
R>T T::*
R>T (type::*)()
R>type (T::*)()
R>type (type::*)(T)
R>type (T::*)(T)
R>T (type::*)(T)
R>T (T::*)()
R>T (T::*)(T)
R>type[i]
R>template-name<i>  (where template-name refers to a class template)
R>TT<T>
R>TT<i>
R>TT<>
R>


Нужно только понимать, что это список элементарных форм, которые могут комбинироваться друг с другом, образуя более сложные формы. Например, T*& также является выводимой формой и является комбинацией форм T* и T&. Ну или, например, конструкция T[i], в которой выводятся и размер массива i, и тип элемента T отсутствует в данном списке, поскольку эта форма является комбинацией двух других элементарных форм: type[i] и T[integer-constant]. Ну и понятно, что сложность таких комбинаций ни чем не ограничивается — это могут быть всякие там const-volatile yказатели на функции, принимающие и возвращающие ссылки на многомерные массивы таких же сколь угодно сложных типов. А также подразумевается, что функции могут иметь какое угодно количество формальных параметров, описанных в т.ч. при помощи variadic packs. То же самое относится и к шаблонам (которые в данной нотации обозначаются как TT).
Re[2]: Функция, принимающая вложенный класс шаблонного класс
R>https://timsong-cpp.github.io/cppwp/n4861/temp.deduct.type#8

R>
R>T
R>cv T
R>T*
R>T&
R>T&&
R>T[integer-constant]
R>template-name<T>  (where template-name refers to a class template)
R>type(T)
R>T()
R>T(T)
R>T type::*
R>type T::*
R>T T::*
R>T (type::*)()
R>type (T::*)()
R>type (type::*)(T)
R>type (T::*)(T)
R>T (type::*)(T)
R>T (T::*)()
R>T (T::*)(T)
R>type[i]
R>template-name<i>  (where template-name refers to a class template)
R>TT<T>
R>TT<i>
R>TT<>
R>


Нужно только понимать, что это список элементарных форм, которые могут комбинироваться друг с другом, образуя более сложные формы. Например, T*& также является выводимой формой и является комбинацией форм T* и T&. Ну или, например, конструкция T[i], в которой выводятся и размер массива i, и тип элемента T, отсутствует в данном списке, поскольку эта форма является комбинацией двух других элементарных форм: type[i] и T[integer-constant]. Ну и понятно, что сложность таких комбинаций ни чем не ограничивается — это могут быть всякие там const-volatile yказатели на функции, принимающие и возвращающие ссылки на многомерные массивы таких же сколь угодно сложных типов. А также подразумевается, что функции могут иметь какое угодно количество формальных параметров, описанных в т.ч. при помощи variadic packs. То же самое относится и к шаблонам (которые в данной нотации обозначаются как TT).