用户定义的参数化操纵器
user defined parameterized manipulators
我使用的是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参数的对象。这应该由过载的运算符使用>gt;打电话给mymanip。然而,这不起作用,imanip没有被宣布。
我还发现了这个版本:
IMANIP(int) fld(int n){
return IMANIP(int)(fld,n);
}
这也不起作用。
我的问题是:
- gcc 4.2.4在这个细节上是否遵循ANSI C++标准?如果是,自1995年以来,标准在这方面是否发生了变化
- 为了定义我自己的参数化操纵器,我需要理解iostream代码并编写我自己的重载imanip和运算符>gt;功能
- 不管问题2的答案是什么,对我来说,理解iostream代码的最佳策略是什么?我应该读代码吗?如何查找属于iostream的已编译库的名称?我应该读书吗
您发布的代码似乎断章取义。imanip
看起来像某个模板,但该模板从未在代码中的任何位置定义过。
但老实说,我甚至不会再考虑使用1995年的一本关于C++的书。1995年,C++甚至没有标准化,尽管有一个"带注释的参考手册"。你的书已经有17年的历史了,这意味着在编程语言方面"已经过时了"。从那时起,C++已经发展了很多,你应该考虑买一本更新的书,也许可以看看http://isocpp.org/get-started给你举几个例子。
为您的问题提供更具体的答案:
- 是的,gcc在这方面遵循标准,但你的书可能不会,因为它是预标准的
- 操纵器是这样做的而不是必须重新实现操作<lt;并再次操作>>。但是,根据操纵器的设计用途,您可能需要调用流或streambuf提供的一些较低级别的方法
- "代码"并不存在,有几个标准库的实现者,他们都有自己的,有时非常复杂的代码等。我建议在网上搜索有关这些库如何工作的信息。当然,一本书甚至更好。考虑购买N.Josuttis的"C++标准库"。有一个最新版本涵盖了"从现在到明天"的标准库,即包括C++11标准的添加
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 如何实现接受参数的自定义流操纵器?
- 转发到 std::ostream <<时操纵器的模板参数推断失败
- 用户定义的参数化操纵器
- 如何操纵两个具有算术操作的参数的结果
- 带有参数的流操纵器如何工作