2015-02-26 6 views
1

Я не могу понять, почему стандарт определяет первый шаблон экземпляра для шаблонов следующим N3797::14.7/4 [temp.spec]:неявной конкретизации специализации

Акт инстанцировании функции, класс, член класса шаблон или шаблон-член template экземпляр.

Но далее везде он использует instatiation специализации, как следующий N3797::14.7/4 [temp.spec]:

проиллюстрированный специализации шаблона может быть либо неявно экземпляр (14.7.1) для список заданных аргументов или явно указывается (14.7.2).

Я этого не понимаю. Сам шаблон - это другое понятие, чем шаблонная спецификация, которая может быть explicit specialization или partial specialization. Например N3797::14.5.5/1 [temp.class.spec]:

Первичный шаблон должен быть объявлен до любых специализаций , что шаблон.

Мой вопрос в том, почему стандарт сначала объявляет концепцию для шаблонов instatiation, но в дополнение к ней применяется эта концепция для специализированных шаблонов?

Кроме того N3797::14.7/4 [temp.spec] определяет понятие специализации следующим образом:

специализации является членом класса, функции или класса, который является либо экземпляром или явно специализированным (14.7.3).

Итак, частичная специализация не специализация, не так ли? Я полностью смущен этими понятиями. Не могли бы вы это немного разъяснить?

ответ

0

Это аналогичный вопрос here. И теперь я снова пытаюсь ответить на этот вопрос.

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

  • Косвенно инстанцирован, текущий модуль компиляции требует использования кода шаблона, компилятор автоматически экземпляр шаблона специализации.

  • Явным образом созданный экземпляр, мы вводим код вручную, поэтому компилятор создает экземпляр специализированной специализации.

  • Явная специализация, учитывая все параметры шаблона и дает не общий код. Как только тип шаблона будет соответствовать, затем создайте экземпляр этой специализации.
  • Частичная специализация, некоторым параметрам задан шаблон и предоставляется не общий код. Как только тип шаблона будет соответствовать, затем создайте экземпляр этой специализации.
+0

спасибо. Проблема в том, что это просто не совсем ясно описано в Стандарте. –

+1

Просто посмотрите на различия. Формально шаблон и их специализация - разные вещи, и к ним следует относиться по-разному. Разумеется, если мы предположим, что шаблонное статирование, определенное в 'N3797 :: 14.7/4 [temp.spec]', полностью совпадает с экземпляром специализированной специализации, тогда это будет нормально. –

+0

@ DmitryFucintv, добро пожаловать. –