Странное объявление (шаблоны). C++

Как может я понимать то, что объявляется здесь: (это взято из другого сообщения на этом форуме),

template static char (&f(ChT*))[1];

Вот то, как я читал:

шаблон статической функции f названный с (ChT*), но затем я не могу иметь смысла, почему там операция вычисления адреса и почему там массив?

Я все еще изучаю, как понять объявления C++, поэтому объясняйте это медленно и тщательно.

6
задан Community 23 May 2017 в 12:18
поделиться

2 ответа

Важно видеть возвращаемый тип. Итак, возвращаемый тип этой функции - ссылка на char [1] ; {{1} } Представьте, что f возвращает что-то вроде ссылки на следующее:

char ret[1];

Например,

template<typename C> static char (&f(ChT<int Fallback::*, &C::x>*))[1]
{

   static char xx[1] = {'F'};
   return xx;
}
3
ответ дан 10 December 2019 в 00:36
поделиться

Использование некоторых определений типов:

typedef char (&arrayref_t)[1];

Это ссылка на массив символов. В массиве один элемент.

typedef ChT<int Fallback::*, &C::x> tmpl_t;

Это шаблонный класс, экземпляр которого создается с помощью типа «указатель на член int класса Fallback » и указатель элемента на x в класс C .

static arrayref_t f(tmpl_t*);

Теперь функция принимает указатель на tmpl_t и возвращает arrayref_t .

7
ответ дан 10 December 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: