Сегодня я проверил Страуструп C ++ 11 FAQ (изменено 7 апреля 2013 г.) и увидено в конце раздела псевдонимов типов:
typedef void (*PFD)(double); // C style
using PF = void (*)(double); // using plus C-style type
using P = [](double)->void; // using plus suffix return type
где лямбда-интродьюсер используется для запуска выражения общего типа функции, которое использует возвращаемый тип в стиле суффикса. Это официальная или удаленная бета-версия / список желаний? Если он официальный, как он будет работать с нестатическими функциями-членами?
using P = [](double)->void;
не является официальным Бьярне, как известно, немного небрежен в своих часто задаваемых вопросах.
Что работает, однако, следующие:
using P1 = auto(double) -> void;
using P2 = auto(*)(double) -> void;
куда P1
это тип функции, и P2
тип указателя на функцию Может быть, это было его намерение.
Лямбда-синтаксис не будет работать с нестатическими функциями-членами, потому что указатель на функцию и указатель на член-функцию реализованы по-разному. Функция указателя на член не является обычным указателем. Он не содержит «точный адрес», как обычный указатель. Мы можем представить, что он содержит «относительный адрес» того, где находится функция в макете класса.
Если вам нужно передать указатель на функцию-член где-нибудь, используйте cosider std :: function using.