Можете ли вы помочь мне понять этот код шаблона C ++? - PullRequest
0 голосов
/ 08 апреля 2011

Hya,

Может кто-нибудь сказать, как работает эта штука?

template <typename T,
template <typename ELEM> class CONT = std::deque >
class Stack {
private:
CONT<T> elems; // elements

public:
void push(T const&); // push element
void pop(); // pop element
T top() const; // return top element
bool empty() const { // return whether the stack is empty
return elems.empty();
}
};

Что я не понимаю, так это: шаблон класса V или произнесите это "шаблон класса CONT = std :: deque"

я представляю это как

template <class>
class CONT = std::deque // here CONT is templatized class declaration.

но меня беспокоит то, как мы можем назначить что-то для имени класса CONT, а не писать его определение (которое я делал до этого времени):

template <class>
class CONT{
//def
}

еще одна вещь:

template <class> // why its only class written in angle bracket there should be also be name
like : template<class ty>

Большое спасибо, любая помощь очень ценится)

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Что я не понимаю, так это: шаблон класса V

В вашем вопросе нет такой строки, поэтому я не могу помочь с этим.

template< template <typename ELEM> class CONT = std::deque >
class Stack

Это объявление параметра шаблона шаблона.Вы передаете шаблон в шаблон Stack, а затем Stack может использовать его для внутреннего использования.

Часть = std::deque является значением по умолчанию, если вы оставляете параметр CONT неопределенным.(std::deque - это предопределенный шаблон.)

Однако это не сработает, поскольку std::deque принимает два аргумента.Это будет работать:

template< template <typename ELEM, typename ALLOC> class CONT = std::deque >
class Stack

Однако ELEM и ALLOC на самом деле ничего не называют;они существуют просто для того, чтобы уточнить, что представляет собой список параметров требуемого шаблона.Таким образом, вы можете опустить их:

template< template <typename, typename> class CONT = std::deque >
class Stack
1 голос
/ 08 апреля 2011

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

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