![](/img/trans.png)
[英]How do I return a pointer from a class member function e.g. size_t * class :: function(); and use a class destructor ~size_t*class::function();
[英]How do I add a member function as e.g. Boost Log filter?
我想通過以下方式添加成員 function 作為日志過濾器:
boost::log::core::get()->set_filter(boost::phoenix::bind(&LoggerContext::checkIfShouldBeLogged, this, <WHICH_ARGUMENT_DO_I_PASS?>));
其中過濾 function 的簽名是
bool LoggerContext::checkIfShouldBeLogged(const boost::log::attribute_value_set &attributeValueSet);
正如文檔中所述。
我不知道要從 function 傳遞哪個參數,我正在嘗試添加過濾器。
如果我制作 function static,我可以簡單地省略參數並像這樣設置過濾器:
boost::log::core::get()->set_filter(&LoggerContext::checkIfShouldBeLogged);
這個論點似乎神奇地通過了。
設置自定義格式化程序也是如此。 以下適用於 static function:
sink->set_formatter(&LoggerContext::fileFormatter);
與簽名
void LoggerContext::fileFormatter(boost::log::record_view const &rec, boost::log::formatting_ostream &strm);
但是當使用boost::phoenix::bind
時,我再次不知道從哪里獲得 arguments 以便通過它們。
@Jorge Bellon:我剛剛讀到你的評論,它給了我一個很好的提示,說明它是如何工作的。
解決方案是使用boost::phoenix
占位符。 這適用於格式化程序和過濾器:
boost::log::core::get()->set_filter(boost::phoenix::bind(&LoggerContext::checkIfShouldBeLogged, this, boost::phoenix::placeholders::arg1));
sink->set_formatter(boost::phoenix::bind(&LoggerContext::fileFormatter, this, boost::phoenix::placeholders::arg1, boost::phoenix::placeholders::arg2));
謝謝你的提示!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.