ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c-类的自定义操纵器

2019-10-12 22:05:34  阅读:170  来源: 互联网

标签:manipulators c


我正在尝试编写带有参数的流操纵器.
我上了3个整数的CDate(年,月,日)课程.
所以我需要使操纵器date_format(const char *).
例如:

CDate a(2006, 5, 15);
cout <<"DATE IS : " << date_format("%Y-hello-%d-world-%m-something-%d%d") << a;

输出将是:

DATE IS : 2006-hello-15-world-5-something-1515

猜猜我需要用那个

ios_base & dummy_date_format_manipulator ( ios_base & x )
{
    return x;
}

ios_base & ( * ( date_format ( const char * fmt ) ) )( ios_base & x )
{
    return dummy_date_format_manipulator;
}

但我不知道如何.

解决方法:

您可以为此使用pword数组.
C中的每个iostream都有两个与之关联的数组.

ios_base::iword - array of ints
ios_base::pword - array of void* pointers

您可以在其中存储自己的数据.要获得一个索引,该索引引用所有iword和pword数组中的空元素,您应该使用函数std :: ios_base :: xalloc().它返回int,可以用作* word中的唯一索引.
您应该在启动时获得一次该索引,然后将其用于带有* word的所有操作.

然后编写自己的manip如下所示:

接收对ios_base对象的引用和对格式字符串的指针的操纵器函数,只需将该指针存储在pword中

iosObject.pword(index_from_xalloc) = formatString

然后重载的运算符<< (>)以相同的方式从iostream对象获取格式字符串.之后,您只需进行引用格式的转换即可.

标签:manipulators,c
来源: https://codeday.me/bug/20191012/1903573.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有