首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iomanip函数是如何实现的?

iomanip函数是如何实现的?
EN

Stack Overflow用户
提问于 2015-03-30 03:04:31
回答 1查看 1.8K关注 0票数 9

一些标准的iomanip函数接受一个参数。

我想知道这是如何完成的,例如,我能用一个函数做类似的事情吗?这确实是我需要的this answer解决方案,但我不知道如何做到这一点。

当我查找setw函数的定义(例如,在http://en.cppreference.com中)时,它将返回类型列为“未指定的”,并且它也只列出一个参数,而不是接受一个stream&参数。这是怎么回事?

给读者的注意:

这个问题有an excellent answer,但是对于查找这个问题的个人来说,这个答案只有结合ios_base提供的下列功能才会有用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-30 03:24:56

下面是一个用户定义的机械手的简单示例,它接受一个使用类定义的参数:

代码语言:javascript
复制
#include <iostream>

class putX // injects some `X`s into the stream
{
    std::size_t _n;
public:
    explicit putX(std::size_t n): _n(n) {}
    std::size_t getn() const {return _n;}
    friend std::ostream& operator<<(std::ostream& os, const putX& obj)
    {
        std::size_t n = obj.getn();
        for (std::size_t i = 0; i < n; ++i)
            os << 'X';
        return os;
    }
};

int main()
{
    std::cout << putX(10) << " test " << putX(10);
}

不需要参数的机械手可以简单地实现为

代码语言:javascript
复制
std::ostream& custom_manip(std::ostream& os) { // do something with os and return os;}

这是因为basic_ostream::operator<<有一个过载,它以指针到函数的std::ostream& (*fp)(std::ostream&)作为其右手侧(例如,机械手)。

PS:由N.Josuttis编写的C++标准库详细描述了机械手/自定义机械手是如何工作的,参见Sec。15.6.3用户定义的机械手

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29337774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档