Size: a a a

2021 March 16

N

Neargye in pro.cxx
Konstantin Osipov
В питоне, если ты хочешь проитерировать по аргументам функции можно просто вызвать locals(), она вернёт что-то вроде std::array если говорить С++ языком. Ничто не мешало сделать то же самое в С++ для  variadic template, просто сделать built-in который бы вернул все аргументы variadic template в виде std::tuple.
Только по тупле нельзя итерироваться фором
Нужно std::apply
источник

KO

Konstantin Osipov in pro.cxx
А собственно оно уже есть...
источник

N

Neargye in pro.cxx
А так никто не спросит что это страшно и взрывает мозг, но штош поделать
источник

VK

Valentin Kornienko in pro.cxx
Neargye
А так никто не спросит что это страшно и взрывает мозг, но штош поделать
С другой стороны, такое и писать не каждый день необходимо
источник

N

Neargye in pro.cxx
Valentin Kornienko
С другой стороны, такое и писать не каждый день необходимо
ну да, по хорошему пишется хелперы темплейтные, а потом реюз
источник

KO

Konstantin Osipov in pro.cxx
template <typename... Args>                                                    
std::array<Server, sizeof...(Args)>                                            
create_cluster(Args... args) {                                                  
       return std::array<Server, sizeof...(Args)>{(Server(args),...)};        
}    
вот так завелось.
источник

N

Neargye in pro.cxx
Konstantin Osipov
template <typename... Args>                                                    
std::array<Server, sizeof...(Args)>                                            
create_cluster(Args... args) {                                                  
       return std::array<Server, sizeof...(Args)>{(Server(args),...)};        
}    
вот так завелось.
👍
источник

N

Neargye in pro.cxx
Konstantin Osipov
template <typename... Args>                                                    
std::array<Server, sizeof...(Args)>                                            
create_cluster(Args... args) {                                                  
       return std::array<Server, sizeof...(Args)>{(Server(args),...)};        
}    
вот так завелось.
наверное еще аргс еще бы форвардить
источник

KO

Konstantin Osipov in pro.cxx
угу, спасибо
источник

D

Danya in pro.cxx
Konstantin Osipov
template <typename... Args>                                                    
std::array<Server, sizeof...(Args)>                                            
create_cluster(Args... args) {                                                  
       return std::array<Server, sizeof...(Args)>{(Server(args),...)};        
}    
вот так завелось.
И каждый раз ручками прописывать N аргументов для N серверов?
источник

ИЭ

Ильяс Эреджепов... in pro.cxx
Привет все. Проблема возникла с использованием grpc в extern C функции. Делаю PAM-модуль.
Такое вот сообщение:
[libprotobuf FATAL google/protobuf/generated_message_util.cc:811] CHECK failed: (scc->visit_status.load(std::memory_order_relaxed)) == (SCCInfoBase::kRunning):
terminate called after throwing an instance of 'google::protobuf::FatalException'
 what():  CHECK failed: (scc->visit_status.load(std::memory_order_relaxed)) == (SCCInfoBase::kRunning):
Aborted
источник

ИЭ

Ильяс Эреджепов... in pro.cxx
А еще я не знаю как правильно обратится.))))
источник

ПК

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

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

В реальном коде же как то должно останавливаться.
источник

ID

In Dev in pro.cxx
Побитый Кирпич
> Здесь же такое не катит, потому что async_read крутится в цикле, из-за чего run никогда не останавливается

В реальном коде же как то должно останавливаться.
Конечно, при завершении программы или при отключении удаленной стороны
источник

ПК

Побитый Кирпич... in pro.cxx
А вообще - взаимодействие с asio выносится в абстракцию и она мокается в тестах. То есть в тестируемом коде нет работы с асио
источник

ПК

Побитый Кирпич... in pro.cxx
Короче, точно так же как и с файлами/реестром и прочим "внешним миром". Вся работа с ним выносится в абстракции (которые можно замокать/застабать в юнит тестах). Сами абстракции через юнит тесты не тестируются
источник

ID

In Dev in pro.cxx
Побитый Кирпич
Короче, точно так же как и с файлами/реестром и прочим "внешним миром". Вся работа с ним выносится в абстракции (которые можно замокать/застабать в юнит тестах). Сами абстракции через юнит тесты не тестируются
Абстракции вообще никак не тестируются?
источник

ПК

Побитый Кирпич... in pro.cxx
In Dev
Абстракции вообще никак не тестируются?
Для этого есть другие тесты.
источник

ПК

Побитый Кирпич... in pro.cxx
Например, тестовый сервер и подключение к нему
источник

ПК

Побитый Кирпич... in pro.cxx
Юнит тесты не могут всё протестировать, только логику, независимую от внешнего окружения.
источник