【发布时间】:2012-11-26 10:46:44
【问题描述】:
我正在使用 gcc 4.2.4。 根据 Schildt,“C++ The Complete Reference”,1995 年,用户定义的参数化操纵器应定义为:
istream &mymanip(istream &stream, type param)
{
// here my code
return stream;
}
// overload
imanip<type> mymanip(type param){
return imanip<type>(mymanip, param)
}
// usage
cin >> mymanip(param);
我相信 imanip(mymanip, param) 应该返回一个包含 mymanip 和 mymanip 参数的对象。这应该由重载的运算符使用>> 来调用 mymanip。但是,这不起作用,没有声明 imanip。
我也found这个版本:
IMANIP(int) fld(int n){
return IMANIP(int)(fld,n);
}
这也不起作用。
我的问题是:
- gcc 4.2.4 在这个细节上是否遵循 ANSI C++ 标准?如果是,那么自 1995 年以来标准是否在这方面发生了变化?
- 为了定义我自己的参数化操纵器,我是否需要了解 iostream 代码并编写自己的重载 imanip 和 operator>> 函数?
- 不管问题 2 的答案,我理解 iostream 代码的最佳策略是什么?我应该阅读代码吗?如何找出属于 iostream 的已编译库的名称?我应该看书吗?
【问题讨论】:
-
你遇到了什么错误?
-
你遇到过“bullschildt”这个词吗?
-
@iammilind:错误:“imanip”未在此范围内声明。在使用 imanip 的第一行。我包括了
#include <iostream> #include <iomanip>。 -
我发现一些库正在搜索包含 iomanip 标头的包,然后 grepping 到包中的文件。
-
@PlasmaHH 你说得对,这本书是一本很差的手册,它只是遵循标准而不是解释。我相信它也会遗漏一些东西,例如inherited functions are not overloaded。
标签: c++ iostream manipulators