C++ встроенное Строковое форматирование и числовое преобразование

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

5
задан Paul Floyd 24 January 2019 в 16:33
поделиться

5 ответов

log4cxx принимает параметры, подобные потоку, поэтому вы можете написать, например:

LOG4CXX_DEBUG( _logger, "the price is " << price );
9
ответ дан 18 December 2019 в 07:30
поделиться

Мой любимый способ встроенного форматирования - использование библиотеки boost.format. Например:

#include <boost/format.hpp>
using namespace boost;

LOG4CXX_INFO( _logger, str(format("cheese it %i, %g") % 1234 % 1.3) );

Это очень удобно для использования переменных аргументов в журналах и макросах.

3
ответ дан 18 December 2019 в 07:30
поделиться

Используя стандартные библиотеки, невозможно создать отформатированную строку без какого-либо выделения памяти с вашей стороны. Класс C ++ string не имеет функции «форматирования» как таковой, поэтому вы должны использовать объект stringstream для объединения чисел с текстом, но это потребует выделения объекта. Рассматривая функции C, такие как sprintf , вам необходимо заранее выделить массив char , поскольку sprintf сам не выделяет никакой памяти.

Тем не менее, даже если бы существовала статическая функция, такая как " string :: format ", я сомневаюсь, что вы получили бы значительное преимущество в скорости по сравнению с выделением объекта stringstream самостоятельно и манипулируя им,

3
ответ дан 18 December 2019 в 07:30
поделиться

Либо используйте библиотеку ускоренного формата, либо вручную закодируйте свою небольшую версию (например, make_string здесь ).

2
ответ дан 18 December 2019 в 07:30
поделиться

Вы можете вернуться к 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
4
ответ дан 18 December 2019 в 07:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: