c++ - 如何将参数添加到流缓冲区c ++
问题描述
我只是想要一种方法来拥有一个函数(或其他任何东西),它有一个标准参数,另一个来自运算符 <<。
my_comp(argument) << "HelloWorld" ;
目标是创建一个任何其他类都可以轻松扩展的 Logger 类,并通过一行代码调用其独特的功能。
Logger 类主要使用 boost/log/ 包,其独特的功能可能会被多次编写。这就是为什么我希望它在一行中。
我不授权自己使用该功能:
BOOST_LOG_SEV(argument_boost_dependent, argument_logger_class_dependent) << "something"
因为我不希望对我的界面有任何依赖。
所以我正在尝试做这样的事情:
loggit(argument_logger_class_dependent) << "something"
并BOOST_LOG_SEV
在类实现中使用 boosts 参数调用
现在我只有一个扩展 std::streambuf 的结构,所以它只能像这样工作:loggit << "HelloLog"
或通过覆盖 operator ()loggit(severity_level::warning)
但两者一起不起作用。
如果有人知道如何添加这个甜蜜的论点,将受到欢迎:)
谢谢
解决方案
@Swordfish 的回答稍微即兴发挥:不是每次都调用构造函数,而是可以重载 operator(),如下所示:
#include <iostream>
struct foo
{
int bar;
foo() {};
foo& operator() (int arg)
{
bar = arg;
return *this;
}
foo& operator<<(std::string baz)
{
std::cout << bar << ' ' << baz;
// call BOOST_LOG_SEV with arg and baz
return *this;
}
};
int main()
{
foo logger;
logger(42) << "Hells in the World!\n"; //prints " 42 Hells in the World!"
logger(32) << "So is heaven\n"; //prints "32 So is heaven"
}
推荐阅读
- asp.net-core - ActionResult 中的隐式转换运算符
不工作 - unit-testing - 错误:Nil 的未定义方法“x”(编译时类型为 (Point | Nil))
- node.js - 使用“npm init”命令制作 package.json 时出错
- sql - 基于 SELECT 脚本创建 DELETE 脚本
- magento - Magento 2.3.3 客户送货地址名麻烦。“名字”是必需的
- node.js - 在 Ubuntu 服务器上解决 net::ERR_TUNNEL_CONNECTION_FAILED
- android - Android:如果他想使用导航意图,如何向用户显示应用选择器?
- java - 如何在 Spring Boot 2.2 中添加soap 标头以调用soap 端点?
- android - 如何检测 system_server 中的内存泄漏
- arduino - 使用 arduino IDE 的 ESP32 中的 BLE 连接白名单