Параметр шаблона по умолчанию с классом - PullRequest
0 голосов
/ 27 января 2019

Я только что узнал о странном синтаксисе параметров шаблона по умолчанию

template<class T = class Z>
struct X
  {};

Что означает второе ключевое слово "класс" в этом контексте?

1 Ответ

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

Ничего особенного на самом деле.C ++ позволяет вам ссылаться на класс через разработанный спецификатор типа .Например,

void foo(class bar*);

. Здесь объявляется функция foo, которая принимает аргумент типа bar*.Если bar не было объявлено ранее, этот сложный спецификатор типа представляет собой объявление bar в пространстве имен, содержащем foo.Т.е. как если бы вы написали:

class bar;
void foo(bar*);

Возвращаясь к вашему примеру, X - это шаблон класса, который ожидает один параметр типа, обозначенный class T, но мог бы быть обозначен так же, какtypename T.Указанный параметр типа имеет аргумент по умолчанию, названный разработанным спецификатором класса class Z.Это объявление может быть переписано так же, как функция выше:

class Z;
template<class T = Z>
struct X
  {};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...