Очень простой подавитель шума, вероятно, сделал бы очень хорошо в Вашей ситуации. Просто ожидайте первого образца, амплитуда которого выше указанного порогового значения (чтобы не инициировать с фоновым шумом). Необходимо было бы только стать более сложными, чем это, если необходимо различать различные типы шума (например, дверь, закрывающаяся по сравнению с ручным хлопком).
log4cxx принимает параметры, подобные потоку, поэтому вы можете написать, например:
LOG4CXX_DEBUG( _logger, "the price is " << price );
Мой любимый способ встроенного форматирования - использование библиотеки boost.format. Например:
#include <boost/format.hpp>
using namespace boost;
LOG4CXX_INFO( _logger, str(format("cheese it %i, %g") % 1234 % 1.3) );
Это очень удобно для использования переменных аргументов в журналах и макросах.
Используя стандартные библиотеки, невозможно создать отформатированную строку без какого-либо выделения памяти с вашей стороны. Класс C ++ string
не имеет функции «форматирования» как таковой, поэтому вы должны использовать объект stringstream
для объединения чисел с текстом, но это потребует выделения объекта. Рассматривая функции C, такие как sprintf
, вам необходимо заранее выделить массив char
, поскольку sprintf
сам не выделяет никакой памяти.
Тем не менее, даже если бы существовала статическая функция, такая как " string :: format
", я сомневаюсь, что вы получили бы значительное преимущество в скорости по сравнению с выделением объекта stringstream
самостоятельно и манипулируя им,
Либо используйте библиотеку ускоренного формата, либо вручную закодируйте свою небольшую версию (например, make_string здесь ).
Вы можете вернуться к C и использовать sprintf
printf(stderr,"The Error(%d) happened(%s)\n",error,errmsg(error));
Boost также имеет формат.
// iostream with boost::format
std::cerr << boost::format("The Error(%d) happened(%s)\n") % error % errmsg(error);
Если вы хотите использовать ярлык
logger && (std::cerr << Stuff); // Where Stuff can be your boost::format