Понадобилось мне сделать всякие инкрементальные счетчики в приложении. Завел несколько структур с числовыми полями под каждый тип счетчика (т.е. каждая структура содержит свой набор счетчиков). Счетчики инкрементируются локально в треде, периодически скидываются в глобальные структуры. Происходит это через сложение полей локальной структуры с соответствующими полями глобальной. Потом специальной поток конвертит структуры в строку (в формате https://github.com/statsite/statsite#protocol, но не суть) и отправляет куда надо.
Поскольку счетчиков изрядное количество, накидал пару derive-макросов:
- для сложения (ну, и, чтобы два раза не вставать, для вычитания) полей однотипных структур (https://github.com/chernomor/ops4struct)
- для конвертации полей в hashmap<string, string> (https://github.com/chernomor/struct2hashmap).
Буду рад замечаниям и предложениям (можно и по исходной задаче)