其他分享
首页 > 其他分享> > c-类的自定义操纵器

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