170 похожих чатов

Добрый день. Не подскажите как возвращаемый тип можно получить тут

через decltype? Map из строки в std::function.
template <typename StringToComponentMap>
auto Factory::makeComponent(string_view type, const StringToComponentMap &map)
-> std::result_of_t<typename StringToComponentMap::mapped_type()> {

auto it = map.find(type);
if (it != map.end())
return it->second();
else
printError(type, map);

return nullptr;
}

16 ответов

4 просмотра

Это std::map?

Aleksei-Budyakov Автор вопроса
Artöm Bakri Al-Sarmini
Это std::map?

Шаблонный параметр предполагается что std::map. Хотелось бы получить тип возвращаемый функцией храняшейся в std::map. То как тут написано у меня работает. А вот с decltype крашиться где-то в коде после использования

-> decltype(std::declval<typename StringToComponentMap::mapped_type>()())

Aleksei-Budyakov Автор вопроса
Alexander Karaev
-> decltype(std::declval<typename StringToComponen...

Спасибо. Не знал про declval. А в чем различие между выведением типа с std::result_of_t и данным способом?

Aleksei Budyakov
Шаблонный параметр предполагается что std::map. Х...

ты понимаешь, что nullptr должен быть совместим с возвращаемым типом из функции?

Use auto , Luke!

Aleksei Budyakov
Спасибо. Не знал про declval. А в чем различие м...

result_of и его замена invoke_result работают с Callable, способ выше явно вызывает Function без аргументов

Тут даже по семантике нельзя nullptr возвращать...

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Use auto , Luke!

Он не мог понять кого ему возвращать, то ли нульптр то ли то что функция возвращает.

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
И юник тоже нельзя.

Так лучше? template <typename StringToBuildFuncMap> auto makeComponent(string_view type, const StringToBuildFuncMap &map) { using ret_t = decltype(std::declval<typename StringToBuildFuncMap::mapped_type>()()); auto it = map.find(type); if (it != map.end()) return it->second(); else printError(type, map); return ret_t{}; }

Aleksei Budyakov
Так лучше? template <typename StringToBuildFuncMa...

в таком варианте проще using ret_t = decltype(map.at(type)())

Aleksei-Budyakov Автор вопроса
Alexander Karaev
в таком варианте проще using ret_t = decltype(map....

Минус такого подхода что он в рантайме и ищет тип по дереву ?

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
помогите решить вопрос ктото решал это?
Михаил Helper
9
что лучше для раста, Clion или IntellJ IDEA?
dbxty
11
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
А вообще существует редактор (современный), который не позиционирует себя как "легковесный, удобный и расширяемый"?
Andrey Zgarbul
7
Карта сайта