Странное объявление (шаблоны). C ++ - PullRequest
6 голосов
/ 17 марта 2010

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

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

Вот как я читаю:

шаблон статической функции f, вызываемой с помощью (ChT<int Fallback::*, &C::x>*), но тогда я не могу понять, почему существует оператор адреса и почему существует массив?

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

Ответы [ 2 ]

7 голосов
/ 17 марта 2010

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

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.

3 голосов
/ 17 марта 2010

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

char ret[1];

Например

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

   static char xx[1] = {'F'};
   return xx;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...