如何将参数添加到流缓冲区 C++
How to add argument to stream buffer c++
我只想要一种方法来拥有一个函数(或任何其他函数),该函数具有一个标准参数和另一个来自运算符 <<.
my_comp(argument) << "HelloWorld" ;
我们的目标是设计一个 Logger class,任何其他 class 都可以轻松扩展并使用一行代码调用其独特的功能。
Loggerclass主要使用boost/log/包,其独特的功能可能会被多次写入。这就是为什么我想要它在一行中。
我没有授权自己使用该功能:
BOOST_LOG_SEV(argument_boost_dependent, argument_logger_class_dependent) << "something"
因为我不想对我的界面有任何依赖。
所以我正在尝试做这样的事情:
loggit(argument_logger_class_dependent) << "something"
并在 class 实现中使用 boosts 参数调用 BOOST_LOG_SEV
现在我只有一个扩展 std::streambuf 的结构,所以它只能像这样工作:loggit << "HelloLog"
或通过覆盖 operator () loggit(severity_level::warning)
但两者一起不起作用。
如果有人知道如何添加这个甜蜜的论点,欢迎 :)
谢谢
#include <iostream>
struct foo
{
int bar;
foo(int bar) : bar{ bar } {};
foo& operator<<(std::string baz)
{
std::cout << bar << ' ' << baz;
return *this;
}
};
int main()
{
foo(42) << "Hells in the World!\n";
}
有道理吗?不?问题已回答?
对@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"
}
我只想要一种方法来拥有一个函数(或任何其他函数),该函数具有一个标准参数和另一个来自运算符 <<.
my_comp(argument) << "HelloWorld" ;
我们的目标是设计一个 Logger class,任何其他 class 都可以轻松扩展并使用一行代码调用其独特的功能。
Loggerclass主要使用boost/log/包,其独特的功能可能会被多次写入。这就是为什么我想要它在一行中。
我没有授权自己使用该功能:
BOOST_LOG_SEV(argument_boost_dependent, argument_logger_class_dependent) << "something"
因为我不想对我的界面有任何依赖。
所以我正在尝试做这样的事情:
loggit(argument_logger_class_dependent) << "something"
并在 class 实现中使用 boosts 参数调用 BOOST_LOG_SEV
现在我只有一个扩展 std::streambuf 的结构,所以它只能像这样工作:loggit << "HelloLog"
或通过覆盖 operator () loggit(severity_level::warning)
但两者一起不起作用。
如果有人知道如何添加这个甜蜜的论点,欢迎 :)
谢谢
#include <iostream>
struct foo
{
int bar;
foo(int bar) : bar{ bar } {};
foo& operator<<(std::string baz)
{
std::cout << bar << ' ' << baz;
return *this;
}
};
int main()
{
foo(42) << "Hells in the World!\n";
}
有道理吗?不?问题已回答?
对@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"
}