<iostream>和<iostream.h>的区别没那么简单
有人说 <iostream.h> 考虑向下兼容,而 <isotream> 把流封装在std命名空间里,可以这样用#include <iostream.h> 或者#include <iostream> using namespace std;
但是分析两者(在VC下)会发现有许多不同.特别是 <iomanip.h> 和 <iomanip> .
例如我们知道在 <iomanip.h> 中存在如下宏定义
OAPP(T)(ostream& (*f)(ostream&,T))
据此我们可以自定义流函数如下:
#include <iostream.h>
#include <iomanip.h>
ostream &funName(ostream &os,int j)
{
for (int i(0);i <j;++i)
{
os < <i < <endl;
}
return os;
}
OAPP(int) NNN(funName);
void main( void )
{
cout < <NNN(3);
}
输出为012
但是我们用
#include <iostream>
#include <iomanip>
using namespace std;
就不行了,因为 <iomanip> 中没有上面的宏定义,无法编译通过.不知其它平台如何呢,例如gcc,敬请各位踊跃发言!!!!
[解决办法]
只不过让你少了一次手工把颜色改回来的代码而已,何必呢。
你只不过是需要
cout < < setcolor_once(red) < < "Hello ";
变成
cout < < setcolor(red) < < "Hello " < < setcolor();
[解决办法]
这个很麻烦么?
struct setColor
{
setColor(int color,char *p):m_color(color),msg(p){}
int m_color;
char* msg;
};
ostream& operator < <(ostream& o,const setColor& s)
{
//做你喜欢做的事情
return o;
}
//使用:
cout < <setColor(REDCOLOR, "[error] ");