通过它的streambuf覆盖基本数据类型的ostream行为

时间:2017-08-02 08:58:43

标签: c++ streambuf

我想对写入std :: ostream的数据执行一些专门的处理。让我们说(为了简单起见),每次将任何基本数据类型注入我的ostream时,我都希望逗号跟随注入。

template<class T>
class MyOstream : public T
{
    // Impossible code
};

#include <sstream>
using namespace std;

int main()
{
    int i = -2;
    double d = 3.21;
    char[] s = "char array";
    bool b = false;
    MyOstream<ostringstream> mos;
    mos << i << d << s << b;
    cout << mos.str() << endl;
    return 0;
}

我希望输出为:

-2,3.21,char array,0,

我记得,为std :: ostream定义的唯一虚方法是析构函数,因此方法覆盖的常规方法是不可能的。但是通过使用专门的streambuf可以实现这种行为吗? streambufs DO有几种虚方法。我知道有些虚拟方法用于在写入数据时更新指针,但我还没有完全理解所有这些方法。我希望有人可以告诉我,如果这些方法中的一个在每次注射时都被称为一次,那么就给我一种方法来实现我的魔力。但是,例如,如果一个大字符数组(超过缓冲区大小)导致对同一方法的多次调用(通过块中的streambuf移动数据),那么我就沉没了。

我唯一的另一种选择是包装ostream而不是继承它。这很容易,但是这种方法排除了将ostream传递给第三方打印例程(期望std :: ostream)的可能性。

是的,我知道我正在考虑的是纯粹的邪恶。

0 个答案:

没有答案