2015-12-19 4 views
0

Что означают эти два утверждения? Это просто две инициализации или что-то еще?Контейнерная декларация с шаблоном

template <class T, size_t N> class array; 
template <class T, class Alloc = allocator<T>> class deque; 
+0

Пожалуйста, уточните каждое слово, если сможете. Спасибо!!! – Des1gnWizard

+0

Не уверен, что такой вопрос будет хорошо принят здесь, друг. Вы можете перефразировать свою проблему? – Ian

+0

Хорошо, кто-то сделал это за вас. – Ian

ответ

1

Как вы дали два известных класса, то есть array & deque, так что вы можете рассказать вам подробно о значении этого синтаксиса. Это потому, что мы знаем, как они реализованы.

Первый случай: инструкция говорит, что программисту нужны два входа для создания объекта типа array. Для Ex: -

array<int, 5> a; // creates an array of 5(ie N) integers(ie T) 

Мы можем прокомментировать эту вещь, потому что мы знаем, что array есть. Аналогично для deque мы можем иметь: -

deque<int, SomeAllocator> d;  // creates a deque container of integers(ie T) having a custom allocator named SomeAllocator (which must be an allocator of integers) 

Как вы новичок, так что было бы лучше, если бы вы только предположить allocator как другой класс, который будет allocate пространства, create объектов, destroy объектов & наконец deallocate пространства.

Еще раз отметим, что мы знаем, что такое deque. Однако, если вы пишете что-то вроде: -

template <class T, size_t N> class A; 
template <class T, class Alloc = allocator<T>> class D; 

Затем код будет просто означать две декларации, где A принимает 2 параметра в <> parenthesis: тип данных один (означает любой тип как int, double или some class и т.д.) & один size_t тип & D также принимает 2 параметра: один тип данных (снова любой тип) & a allocator этого типа данных.

+0

Спасибо большое! T.T – Des1gnWizard

1

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

+0

Спасибо! Хотя я не могу полностью понять ваше объяснение. Это очень сложно для новичков понять все термины, так как обычно это приводит к ситуации, когда мне нужно перейти по ссылке, чтобы понять все вещи ... – Des1gnWizard

+1

Да. Ваша проблема в том, что StackOverflow не является учебным сайтом. Найдите хорошую учебную книгу (и я думаю, что вам нужны мертвые деревья, а не веб-сайт), и работать через нее. Я не знаю, какая хорошая книга в эти дни - я узнал из «языка программирования C++», но это полезно только для изучения C++ 90, если вы опытный программист на C. C++ 11/14 - значительно другой (лучший) язык, поэтому вам нужна более современная книга. –

Смежные вопросы