首页 > 解决方案 > 如何将参数添加到流缓冲区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)但两者一起不起作用。

如果有人知道如何添加这个甜蜜的论点,将受到欢迎:)

谢谢

标签: c++argumentsoperatorsstreambuf

解决方案


@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"
}

推荐阅读