我想对写入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)的可能性。
是的,我知道我正在考虑的是纯粹的邪恶。