Есть ли новый формат выражения типа функции в C ++ 11?

Сегодня я проверил Страуструп 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

где лямбда-интродьюсер используется для запуска выражения общего типа функции, которое использует возвращаемый тип в стиле суффикса. Это официальная или удаленная бета-версия / список желаний? Если он официальный, как он будет работать с нестатическими функциями-членами?

11

Решение

using P = [](double)->void;

не является официальным Бьярне, как известно, немного небрежен в своих часто задаваемых вопросах.

Что работает, однако, следующие:

using P1 = auto(double) -> void;
using P2 = auto(*)(double) -> void;

куда P1 это тип функции, и P2 тип указателя на функцию Может быть, это было его намерение.

11

Другие решения

Лямбда-синтаксис не будет работать с нестатическими функциями-членами, потому что указатель на функцию и указатель на член-функцию реализованы по-разному. Функция указателя на член не является обычным указателем. Он не содержит «точный адрес», как обычный указатель. Мы можем представить, что он содержит «относительный адрес» того, где находится функция в макете класса.

Если вам нужно передать указатель на функцию-член где-нибудь, используйте cosider std :: function using.

0

По вопросам рекламы [email protected]