Size: a a a

2021 March 16

a

albert(); in pro.cxx
Antony Polukhin
С C++23 можно будет заменить на std::function_ref
После какого возраста начинают писать std::?
источник

ГH

Гласси Hudobin in pro.cxx
In Dev
Если можно, то пока тут собрались знающие Asio люди, хотелось бы задать вопрос.
Пишете ли вы юнит-тесты для кода на Asio и как?
К примеру, если у меня есть класс tcp соединения, который принимает сокет и делает на нем async_read до дисконнекта и зовет какой-то колбек. Есть метод send, который отдаст данные в async_write.
Есть ли какой-то адекватный подход для юнит-тестирования асинхронного кода?

Тесты в самом asio устроены так, что контексту напихивается работа, потом делается run. И по окончанию run'а проверяется результат.
Здесь же такое не катит, потому что async_read крутится в цикле, из-за чего run никогда не останавливается
юнит-тесты работают только на "чистых" функциях. Сокеты — это уже не про юнит-тесты.
источник

ID

In Dev in pro.cxx
Гласси Hudobin
юнит-тесты работают только на "чистых" функциях. Сокеты — это уже не про юнит-тесты.
Тогда какой подход к автоматическому тестированию здесь должен быть?
источник

NK

Nikolay Kononov in pro.cxx
Моки, например
источник

CD

Constantine Drozdov in pro.cxx
albert();
После какого возраста начинают писать std::?
После третьего стандарта плюсов
источник

AP

Antony Polukhin in pro.cxx
In Dev
Разве там нет оптимизации для указателей на функцию и лямбд с маленьким захватом?
Есть, но std::function позволяет передать и большой по размеру функтор, который неявно вызовет динамическую аллокацию
С указателем сделать начаянно больно производительности сложнее
источник

YB

Yarique Belgorodsky in pro.cxx
Egor Pugin
ну вроде у меня в примере так и есть
https://t.me/ProCxx/435215
Неявное преобразование, видимо, используется. Я обычно явно контекст дёргал.
источник

ГH

Гласси Hudobin in pro.cxx
In Dev
Тогда какой подход к автоматическому тестированию здесь должен быть?
Это серая зона. С юнит-тестами все понятно. С интеграционними тестами все понятно. Что между ними — непонятно. Есть какие-то частные решения, вроде тестов на с нуля создаваемой БД.
источник

DP

Denis Paukaev in pro.cxx
In Dev
Разве там нет оптимизации для указателей на функцию и лямбд с маленьким захватом?
не особо понятно как оно там должно оптимизироваться, учитывая type erase и виртуальные функции
источник

ID

In Dev in pro.cxx
Antony Polukhin
Есть, но std::function позволяет передать и большой по размеру функтор, который неявно вызовет динамическую аллокацию
С указателем сделать начаянно больно производительности сложнее
То есть здесь по сути именно защита от пользователя, чтобы не позволить ему отдать что-то хуже указателя на функцию?
источник

YB

Yarique Belgorodsky in pro.cxx
In Dev
Тогда какой подход к автоматическому тестированию здесь должен быть?
моки, gtest expect_call или аналоги и... понеслась, дальше сами колбеки юнит тестами покрываешь
источник

AP

Antony Polukhin in pro.cxx
Александр Караев
не вижу активного пропозала на эту тему
источник

АК

Александр Караев... in pro.cxx
Date:  2019-10-06
источник

AP

Antony Polukhin in pro.cxx
источник

АК

Александр Караев... in pro.cxx
отлично, спасибо
источник

SE

Stanislav Ershov in pro.cxx
ай, эту ссылку не заметил, а хотел ответить на ссылку выше)
источник

KO

Konstantin Osipov in pro.cxx
Добрый день. Снова вопрос про fold expressions. Вот есть такая функция: template <size_t N>                                                            
std::array<Server, N>                                                          
create_cluster() {                                                              
       return std::array<Server, N>();                                        
}    
На самом деле хочется сконструировать экземпляры Server нетривиальным способом, то есть передать в конструктор std::array initializer_list. Правильно я понимаю, что наиболее прямолинейным способом это сделать будет определить лямбду, которая будет конструировать индивидуальный объект Server, завернуть эту лямбду в fold expression и передать в initializer list?
источник

KO

Konstantin Osipov in pro.cxx
И ещё взрывает мозг что в Server конструктор копирования удалён, и это всё работает - то есть всё работает с использованием move конструктора, как я понимаю.
источник

ID

In Dev in pro.cxx
Konstantin Osipov
И ещё взрывает мозг что в Server конструктор копирования удалён, и это всё работает - то есть всё работает с использованием move конструктора, как я понимаю.
Нет, здесь RVO, нет ни мува, ни копирования
источник

N

Neargye in pro.cxx
Konstantin Osipov
Добрый день. Снова вопрос про fold expressions. Вот есть такая функция: template <size_t N>                                                            
std::array<Server, N>                                                          
create_cluster() {                                                              
       return std::array<Server, N>();                                        
}    
На самом деле хочется сконструировать экземпляры Server нетривиальным способом, то есть передать в конструктор std::array initializer_list. Правильно я понимаю, что наиболее прямолинейным способом это сделать будет определить лямбду, которая будет конструировать индивидуальный объект Server, завернуть эту лямбду в fold expression и передать в initializer list?
такое не сойдет? https://en.cppreference.com/w/cpp/container/array/to_array
заменить только массин на лист/лямбду etc
источник