Доклад

C++ трюки из Такси

  • На русском языке
Презентация pdf

При написании больших фреймворков приходится сталкиваться с типовыми задачами, решения для которых давно известны. Однако эти решения недостаточно эффективны, и можно сделать намного лучше.

О подобных эффективных трюках мы и поговорим!

  1. Есть известный паттерн Pimpl:
struct something {

int foo();

private:

struct impl;

std::unique_ptr< const impl> impl_; // динамическая аллокация :(

};

А давайте уберём из него динамическую аллокацию и добавим кэш-дружелюбность.

  1. Логирование пользовательских типов:
std::ostream& operator<<(std::ostream& os, const user_data_type& udt);

my_debug_logger << user_data_type{"foo", "bar"};

А давайте обойдёмся без std::ostream и без вычисления значения переменных для записей, которые мы не будем логировать.

  1. Конвертация из JSON/XML/YAML/... в пользовательские типы:
// Так не компилируется:

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).

Давайте сделаем красиво.

Комментарий программного комитета:

Все доклады Антона очень качественные: видно, что он любит своё дело и очень хорошо его знает. Поэтому всегда интересно и полезно послушать практические и жизненные советы от него.

  • #adl
  • #fastpimpl
  • #logging
  • #pimpl

Спикеры

Доклады