Constantine
О_О Научите этому QtCreator. Я в долгу не останусь
Причем умеет шаблонные подстановки по дороге прогонять
🐙 Antony
Как это сделать?
Constantine
Как это сделать?
Насколько я понимаю, у них в Intellisense отдельный C++ компилятор вообще
Anonymous
Читаем правила (описание группы), вакансии в личку @AlexFails.
Constantine
Как это сделать?
Причем они знатно обвешались эвристиками
Constantine
На раскрытие type alias-ов
Constantine
Constantine
Я знаю как минимум одно расхождение clang + ms extensions и msvc, можно на нем проверить
Constantine
А, блин, это ошибка линкера
Constantine
error: unknown type name 'Hello'
Vitaliy
Всем привет. Какие библиотеки вы используете у себя на проектах, если требуется наружу вернуть занчение, а также сообщить о том, чем завершилась работа функции ?
Vitaliy
Или например сделать либо, то либо другое.
Vitaliy
В частном случае это optional, например для задачи поиска чего-либо.
Vitaliy
Через has_value мы определяем есть ли значение или нету.
Vitaliy
Но что, если мы ищем в базе данных к которой не удалось подключиться ? Как сообщить об этом наружу ?
Constantine
https://github.com/facebook/folly/blob/master/folly/Expected.h
Vitaliy
https://github.com/facebook/folly/blob/master/folly/Expected.h
Вот такой вариант ещё находил. https://github.com/TartanLlama/expected
Constantine
ну идеи явно общие union { T m_val; unexpected<E> m_unexpect; }; bool m_has_val;
Constantine
я лично по традиции велосипедил, мне очень хотелось в этом месте иметь структуру типа folly::Try с указанием списка возможных исключений
kitsu
де факто копия аналогичного типа в расте
Vitaliy
кустомный result.hpp
Уже расплодились во всём проекте пары из була и ещё чего-нибудь. Настало время обратиться к комьюинити.
kitsu
Уже расплодились во всём проекте пары из була и ещё чего-нибудь. Настало время обратиться к комьюинити.
нене, это совсем не хорошо, template<V, E> class Result: boost::variant<Val<V>, Err<E>> {..}
Properrr
ну или enum Status
Vitaliy
Лично я считаю его отвратным )
Vitaliy
Ты смотришь на вызов функции и не понимаешь, что ты от неё ждёшь на самом деле, не залезая внутрь.
Properrr
Ты смотришь на вызов функции и не понимаешь, что ты от неё ждёшь на самом деле, не залезая внутрь.
смотря какой дизайн у тебя в общем. встречал API в таком стиле. мне нравится
Vitaliy
ну или unique_ptr
И каждый раз аллокации делать ? Накладно
Vitaliy
нене, это совсем не хорошо, template<V, E> class Result: boost::variant<Val<V>, Err<E>> {..}
Такое тоже рассматривал. Вобщем сейчас займусь ресерчем.
Vitaliy
смотря какой дизайн у тебя в общем. встречал API в таком стиле. мне нравится
Я тоже встречал. Но я за то, чтобы входные аргументы передавались функции как аргументы, а выходные возвращались. На мой взгляд это сильно упрощает чтение кода и его понимание.
Ivan
Тогда std::tie должен помочь: val, err; std::tie(val,err) = func( ... ).
Vitaliy
были проблемы?
Что ты имеешь ввиду ? Проблемы какого рода ?
Vitaliy
Тогда std::tie должен помочь: val, err; std::tie(val,err) = func( ... ).
Ну это ничем не лучше возврата пары )
Ivan
"сахарок" который может облегчить чтение, если главная цель - понятность/приятность
kitsu
Что ты имеешь ввиду ? Проблемы какого рода ?
ну раз "рассматривал", то наверное по какой-то причине не подошло, так?
Vitaliy
Structured binding спешит на помощь
auto [x, y] = ... ? У нас c++11
Constantine
почему?
ну я для себя понял, что там безумно существенные тонкости касательно.
kitsu
это конец предложения?
Dumitru
кустомный result.hpp
я это где-то видел
Constantine
это конец предложения?
на самом деле, у меня еще не наработана полноценная база использования, там есть тонкости, в которых я не уверен
Constantine
но кажется, что у этого класса просто нет альтернатив, кроме как уметь врапать std::exception_ptr
Constantine
отсюда кажется, что принципиальной основой является структура folly::Try<T>, выражающее в точности T или исключение
Constantine
мм, про какие исключения речь то? это просто возвращаемый тип
речь о том, что любая достаточно сложная функция либо умеет бросать исключения, либо умеет его возвращать
Constantine
если она умеет бросать исключения, вся эта схема нафиг не сдалась - просто бросаемся
Anatoliy
Ой как вряд ли
там clang и самый честный intellisense без эвристик
Evgenii
Как это сделать?
либшланг достаточно прикрутить, не?
Constantine
там clang и самый честный intellisense без эвристик
в интеллисенсе шланг основой?
kitsu
если она умеет бросать исключения, вся эта схема нафиг не сдалась - просто бросаемся
ну тогда не очень удобно использовать эту функцию как интерфейс, т.к надо знать нутро имплементации
kitsu
а так все по сигнатуре ясно
Anatoliy
в интеллисенсе шланг основой?
я про "интеллисенс" QtCreator-а
Constantine
Constantine
и про то, что емнип технически у Intellisense вообще другой компилятор
Anatoliy
Я не знаю. Пользуюсь студией только если вынужден. Но вроде бы Visual C++ переходит на clang всецело
Anatoliy
может быть я и ошибаюсь
Constantine
у вижака legacy объем такой, что я мало верю, что есть смысл его вообще реализовывать в clang
Igor
О_О Научите этому QtCreator. Я в долгу не останусь
твоё желание услышано https://blog.qt.io/blog/2018/02/07/qt-creator-4-6-beta-released/ The informational tooltips on symbols are now generated from information from Clang instead of the built-in model (if you enabled the Clang code model). It now resolves auto to the actual type and shows template parameters for template types.
Constantine
в частности я не уверен, что clang может в MSVC like name lookup кажется, clang изначально использует ленивые модели, соответствующие double name lookup
Anatoliy
в QtCreator надо выбрать Clang Code Model, заместо их уже неподдерживаемых эвристик (вот что человек пишет https://bugreports.qt.io/browse/QTCREATORBUG-18675?focusedCommentId=366569&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-366569)
Anatoliy
в частности я не уверен, что clang может в MSVC like name lookup кажется, clang изначально использует ленивые модели, соответствующие double name lookup
Очень может быть. Действительно, как можно парсить (начиная с некоторого места) некорректный код.
Constantine
Очень может быть. Действительно, как можно парсить (начиная с некоторого места) некорректный код.
Ну это полнейший холивар, я таки считаю, что MSVC like name lookup просто лучше и это just-another-case комитет принял в стандарт способ убить себе ногу
Kirill
doc.qt.io/qtcreator/creator-clang-codemodel.html
Constantine
почините парсер
Constantine
https://clang.llvm.org/docs/MSVCCompatibility.html#template-instantiation-and-name-lookup
On Windows, Clang attempts to follow the normal lookup rules, but if lookup fails, it will assume that the user intended to find the name in a dependent base
Properrr
народ, а кто-то пилил интерпретаторы на llvm?