Перегрузка & lt; & lt; Оператор для Boost Logging Object

Поэтому я хочу использовать Boost.Log для всех моих целей регистрации. В настоящее время я написал класс, который включает в себя все необходимые операции создания экземпляров и настройки вспомогательных методов.

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

Вот что я попробовал:

template <typename T>
void trace::operator <<(T data)
{
std::string text=boost::lexical_cast<std::string>(data);
std::cout<<data<<std::endl;
BOOST_LOG_TRIVIAL(debug) << text;
}

Тем не менее, я понимаю, что это немного ошибочно в своей логике.
Чтобы можно было передать несколько аргументов << это должно быть рекурсивным.
Но я немного запутался, как бы я сделал это с буст-логом.

Нужно ли определять систему журналов с помощью специального приемника вместо удобного макроса повышения? Если да, то поддерживает ли это возвращение std :: ostream? Я предполагаю, что это будет возвращаемое значение и входное значение в поток.

6

Решение

если я правильно понимаю ваш вопрос, вам нужно зарегистрировать информацию о вашем объекте, используя << оператор.
В Boost Log используются ostream-совместимые операторы, поэтому все, что вам нужно, это определить << оператор для вашего класса:

class your_class_t{
public:
std::string m_data;
int m_value;

friend std::ostream& operator<< (std::ostream& oss, your_class_t const & val) {
oss<<val.m_data << ": " << val.m_value;
return oss;
}
}

Тогда вы можете отправить свой класс в ostream:

your_class_t mytest;
mytest.m_data = "hi";
mytest.m_value = 123;
BOOST_LOG_TRIVIAL(debug) << mytest;

Ты получишь hi: 123

4

Другие решения

Других решений пока нет …