Как использовать существующую перегрузку оператора << при входе в Pantheios? - PullRequest
1 голос
/ 02 декабря 2010

Если есть тонна пользовательских типов, которые реализуют operator<< для записи в std::ostream. Как я могу использовать их при регистрации моих типов с помощью Pantheios?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2010

Вы должны предоставить «прокладки» для ваших собственных типов данных. Вот, как выглядит документация о том, как это сделать: http://www.pantheios.org/tutorials_code.html#types_without_shims. Пример:

namespace stlsoft
{
  inline stlsoft::shim_string<char> c_str_data_a(Point const& point)
  {
    stlsoft::shim_string<char> s(101);

    int cch = ::sprintf(s, "{%d, %d; area=%d}",
                        point.x, point.y, point.x * point.y);

    s.truncate(static_cast<size_t>(cch));

    return s;
  }
  inline size_t c_str_len_a(Point const& point)
  {
    char buff[101];

    return static_cast<size_t>(::sprintf(&buff[0], "{%d, %d; area=%d}",
                               point.x, point.y, point.x * point.y));
  }

} // namespace stlsoft

В этом случае тип может быть передан непосредственно в оператор журнала:

pantheios::log_ERROR("Point: ", point);

Удачи!

1 голос
/ 27 декабря 2010

Ну, есть способ, которым вы можете использовать operator<<, но это не красиво.Лично я использую библиотеку boost :: lexical_cast для преобразования практически любого типа данных в тип данных std :: string, который Pantheios изначально поддерживает.Поэтому, если у вас есть operator<<, определенный для класса point, вы можете просто набрать:

pantheios::log_ERROR("Point: ", boost::lexical_cast<string>(point_object))

Конечно, есть несколько предостережений с этим.Многие люди жалуются, что boost :: lexical_cast идет медленно.Вы можете найти его в Google и найти несколько статей, в которых говорится об этом (/1291310/ochen-plohoe-povyshenie-proizvoditelnost-lexicalcast, http://accu.org/index.php/journals/1375).. Учитывая то, что Pantheios обладает превосходной производительностью, вы можете потерять часть этого преимущества. И самое очевидное, вы можете добавить несколько сотен заголовочных файлов.в свой проект, когда вы добавляете boost :: lexical_cast. Вы также должны вводить больше букв (например, boost :: lexical_cast) для каждого преобразования (вы можете свести это к минимуму с помощью макроса - #define BLCS boost::lexical_cast<string> - но это больше косвенное, чем некоторые люди могутбудьте удобны с).

...