Как я могу понять значение слова «точка инстанциации»? - PullRequest
0 голосов
/ 14 января 2019

Сейчас я изучаю некоторые навыки метапрограммирования из выражений непостоянных констант , и я чувствую растерянность по поводу "Точки инстанцирования". Автор говорит

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

Если на специализацию шаблона X ссылаются в контексте, который зависит от параметра-шаблона некоторого окружающего шаблона Y, данная точка инстанции зависит от точки инстанции Y.

  • Если X является специализацией шаблона функции, то точка инстанцирования - это точка Y.
  • Если X является специализацией шаблона класса, точка его создания находится непосредственно перед точкой создания Y.

В противном случае данный момент создания экземпляра привязывается к расположению декларации / определения области действия пространства имен (D), в котором содержится оператор, ссылающийся на X.

  • Если X является специализацией шаблона функции, точка создания находится сразу после D.
  • Если X является специализацией шаблона класса, точка создания находится непосредственно перед D.

Я не знаю, что такое «на специализацию шаблона X ссылаются в контексте, который зависит от параметра-шаблона какого-то окружающего шаблона Y», он имеет в виду

template<typename T>
class Y{
    template<typename U1> void X1(){...};
    template<typename U2> class X2{...};
}

Рассмотрим экземпляры Y<int>::X1<int>(...), X1 и Y одновременно.

Рассмотрим Y<int>::X2<int>{...}, X2 первый Y второй.

1 Ответ

0 голосов
/ 15 января 2019

Это просто означает, что, учитывая

template<class> class A {};
template<class T> void f(T) {}
template<class T> void g() {f(A<T>{});}

точка создания (скажем) A<int> находится непосредственно перед тем, что разделяют f<int> и g<int>. (Помните, что шаблоны функций (но не классов) могут иметь более чем одну точку создания в единице перевода.)

...