Могу ли я ввести определение шаблона шаблона? - PullRequest
9 голосов
/ 01 мая 2011

В заголовках библиотек C ++ иногда можно увидеть следующее, чтобы улучшить читаемость кода внутри класса:

template<typename MyExplicitelyLongTemplateParameter>
class C
{
public:
    typedef MyExplicitelyLongTemplateParameter P;

    // Use "P" and keep your sanity.
};

Мой вопрос: можно ли сделать то же самое с параметром шаблона шаблона?

template<template<typename> typename MyExplicitelyLongTemplateParameter>
class C
{
public:
    typedef /* ??? */ P;

    // Use "P" and keep your sanity.
};

Ответы [ 2 ]

8 голосов
/ 01 мая 2011

Вы не можете создать 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.
};
3 голосов
/ 01 мая 2011

В текущем стандарте вы не можете печатать шаблон. В новом, готовящемся к выпуску стандарте вы сможете ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...