Антон Полухин
Компания: Яндекс.Такси
При написании больших фреймворков приходится сталкиваться с типовыми задачами, решения для которых давно известны. Однако эти решения недостаточно эффективны, и можно сделать намного лучше.
О подобных эффективных трюках мы и поговорим!
struct something {
int foo();
private:
struct impl;
std::unique_ptr< const impl> impl_; // динамическая аллокация :(
};
А давайте уберём из него динамическую аллокацию и добавим кэш-дружелюбность.
std::ostream& operator<<(std::ostream& os, const user_data_type& udt);
my_debug_logger << user_data_type{"foo", "bar"};
А давайте обойдёмся без std::ostream и без вычисления значения переменных для записей, которые мы не будем логировать.
// Так не компилируется:
user_data_type1 Parse(const Json& value);
user_data_type2 Parse(const Json& value);
// Так компилируется, но...
template < class T> T Parse(const Json& value);
template <> user_data_type1 Parse(const Json& value);
template <> user_data_type2 Parse(const Json& value);
// ...ужасные нечитаемые сообщения об ошибках, и чудит Parse<std::vector>(const Json& value).
Давайте сделаем красиво.
Комментарий программного комитета:
Все доклады Антона очень качественные: видно, что он любит своё дело и очень хорошо его знает. Поэтому всегда интересно и полезно послушать практические и жизненные советы от него.
Компания: Яндекс.Такси