2013-06-20 2 views
3

Я столкнулся с этим кодом и не знаю, что он делает. Можете ли вы его расшифровать?понимание синтаксиса определения typedef?

typedef std::map<std::string, bool (Foo::*)()> x_t; 

Часть, которую я не понимаю, является значением карты. Я удивлен его действительным синтаксисом C++.

Спасибо.

+4

В чем вопрос «regex»? (Для чего я не думаю, что вы можете анализировать объявления типа C++ с выражениями регулярных выражений, но никогда не пытались) –

+0

@David Ваше право. Я неправильно читал указатель как значение всех функций в определенном пространстве имен. Сожалею. – anio

ответ

6

bool (Foo::*)() является указателем на функцию-член Foo, которая не принимает аргументов и возвращает bool. Таким образом, x_t, вероятно, используется для сопоставления имен функций-членов с фактическими членами.

+1

Замечание о том, как использовать такой указатель для потенциальных читателей: простой указатель на функцию 'bool (* pf)() = &bar;' может использоваться как '(* pf)()' или просто 'pf()' (здесь эквивалентно 'bar()', но с добавленной косвенностью); указатель на функцию-член 'bool (Foo :: * pmf)() = & Foo :: baz;' требует, чтобы объект класса [или указатель] вызывался с оператором '. *' [или '-> * ']:' Foo x; 'и' (x. * Pmf)() '(нужны скобки) [или' Foo * px = & x; 'и' (px -> * pmf)() '] (здесь эквивалентно на 'x.baz()' [или 'px-> baz()'], но с добавленной косвенностью). –

1

x_t является map от string до указателя на член-функции-of Foo возвращающегося bool.

Вы можете читать декларации C++ в обратном порядке или в некоторых случаях наизнанку. Значение карты считывается с * как функция-член Foo, возвращающая bool, ключ карты, очевидно, равен string, а x_t - это псевдоним типа для карты от ключа к значению.

Смежные вопросы