После этого у меня возникли проблемы с пониманием определения типов этих сложных объявлений. И только когда я прочитал Справочное руководство по C Harbison-Steele по этой теме, все это приобрело смысл. В нем автор пишет:
«Идентификатор, заключенный в любой декларатор объявления, определяется как имя типа («имя typedef» ); тип — это то, чему был бы присвоен идентификатор, если бы объявление было обычным объявлением переменной. После того как имя объявлено как тип, оно может появиться везде, где разрешен спецификатор типа. Это позволяет использовать мнемонические сокращения для сложных типов».
На данный момент у меня возникают трудности с псевдонимами C++, которые определяются с помощью и эти проблемы в основном связаны с псевдонимами шаблонов.
Итак, если я возьму простой пример: использование func = void (*) (int, int), это для меня это просто; func — это указатель на функцию, которая принимает на вход два целых числа и ничего не возвращает.
Это эквивалентно: typedef void (*func)(int, int) и все хорошо.
Тем не менее, если я возьму этот пример: template using ptr = T*, это определит ptr как указатель на тип T и может использоваться как: ptr x.
Для меня это имеет смысл, но я не вижу в этом смысла. Какую точку зрения я могу принять, чтобы полностью понять это?
Допустим, я компилятор, которому нужно разобраться в этом. Как бы я к этому подошел? Как шаблон детали влияет на объявление? Это еще один случай действия правила спирали?
А теперь еще один пример, который для меня немного запутан:
Код: Выделить всё
template using Invoke = typename T::type;
template using EnableIf = Invoke;
template
int fpoly_only(T) { return 1; }
Я понимаю, что делает этот фрагмент. Но если бы я захотел написать что-то подобное, я бы не смог. Как бы я подошел к этому, если бы мне пришлось это сделать?
Я понимаю, что такое шаблоны и их обоснование. Тогда мой вопрос заключается в том, как шаблоны влияют на псевдонимы с точки зрения компилятора?
Любые предложения по внешнему заслуживающему доверия источнику (книге, разделу стандарта CPP или чему-то подобному), который объясним это подробно, будем очень признательны.
Подробнее здесь: https://stackoverflow.com/questions/784 ... iases-in-c