Страницы

Поиск по вопросам

суббота, 7 марта 2020 г.

Вывод типа результата функции

#cpp #cpp14


Пытаюсь вывести тип результата одной функции и подставить его в аргумент другой +
добавить ссылку:

struct A {
    auto foo(int) const {
        return 42;
    }

    void bar(std::result_of_t& i) {}
};


Однако получаю много ошибок компиляции. Как сделать правильно для любого типа результата
(не только int)?
    


Ответы

Ответ 1



auto foo(int) const { return 42; } это уже сразу С++14, но не С++11. При этом дедукция типа auto будет выполнена только после завершения определения класса, по каковой причине определить возвращаемый тип foo внутри определения класса не получится (если не рассматривать внутренность тел методов). Если вы явно укажете тип auto foo(int) const -> int { return 42; } то будет работать void bar(std::result_of_t& i) {} Попытка сделать void bar(decltype(foo(int{}))>& i) {} не пройдет, потому что ссылаться на foo без объекта в этом месте запрещается. А "потенциальный" вариант void bar(decltype(std::declval().foo(int{}))>& i) {} не проходит из-за незавершенности типа A.

Комментариев нет:

Отправить комментарий