#c #templates
#c #шаблоны
Вопрос:
В заголовках библиотеки C мы иногда видим следующее, чтобы улучшить разборчивость кода внутри класса:
template<typename MyExplicitelyLongTemplateParameter>
class C
{
public:
typedef MyExplicitelyLongTemplateParameter P;
// Use "P" and keep your sanity.
};
Мой вопрос в том, можно ли сделать то же самое с параметром template template?
template<template<typename> typename MyExplicitelyLongTemplateParameter>
class C
{
public:
typedef /* ??? */ P;
// Use "P" and keep your sanity.
};
Комментарии:
1. Я раньше не сталкивался с этим синтаксисом. Что это делает?
2. Я думаю, что это должно быть template<шаблон<имя_типа> класс MyExplicitelyLongTemplateParameter>
Ответ №1:
Вы не можете создать typedef, нет, но вы можете сократить имя:
template <template <typename> typename MyExplicitlyLongTemplateParameter>
class C
{
public:
template <typename T>
struct P
{
typedef MyExplicitlyLongTemplateParameter<T> Type;
};
// Use "P<T>::Type" and keep your sanity.
};
Комментарии:
1. 1, но, как отмечено в комментариях выше, это действительно должно быть
<template <typename> class ...>
.
Ответ №2:
В текущем стандарте вы не можете ввести параметр template. В новом, готовящемся к выпуску стандарте вы сможете….
Комментарии:
1. И как кто-нибудь сможет ввести defв новом стандарте?