Под катом пример маленького и очень тривиального рефакторинга. С использованием приема, который я некоторое время назад подсмотрел в чужом коде и с тех пор с удовольствием применяю в C++11 коде.
Было:
using namespace std; using namespace std::chrono; void show_cfg( const cfg_t & cfg ) { cout << "Configuration:\n" "operation duration: " << duration_cast< milliseconds >( cfg.m_op_duration ).count() << " ms.\n" "operation timeout: " << duration_cast< milliseconds >( cfg.m_op_timeout ).count() << " ms.\n" "check interval: " << duration_cast< milliseconds >( cfg.m_check_interval ).count() << " ms." << endl; } |
Стало:
using namespace std; using namespace std::chrono; void show_cfg( const cfg_t & cfg ) { auto ms = []( steady_clock::duration d ) { return duration_cast< milliseconds >( d ).count(); }; cout << "Configuration:\n" "operation duration: " << ms( cfg.m_op_duration ) << " ms.\n" "operation timeout: " << ms( cfg.m_op_timeout ) << " ms.\n" "check interval: " << ms( cfg.m_check_interval ) << " ms." << endl; } |
Причем это как раз тот случай, когда auto и вывод типов в C++11 совершенно в тему. Особенно хорошо то, что C++11 сам может вывести тип возвращаемого лямбдой значения. Поэтому не приходится выяснять, что именно возвращается методом milliseconds::count(). Ну а в C++14 автоматически мог бы выводится и тип аргумента лямбды.
Комментариев нет:
Отправить комментарий