一些标准的iomanip函数接受一个参数。
我想知道这是如何完成的,例如,我能用一个函数做类似的事情吗?这确实是我需要的this answer解决方案,但我不知道如何做到这一点。
当我查找setw函数的定义(例如,在http://en.cppreference.com中)时,它将返回类型列为“未指定的”,并且它也只列出一个参数,而不是接受一个stream&参数。这是怎么回事?
给读者的注意:
这个问题有an excellent answer,但是对于查找这个问题的个人来说,这个答案只有结合ios_base提供的下列功能才会有用
发布于 2015-03-30 03:24:56
下面是一个用户定义的机械手的简单示例,它接受一个使用类定义的参数:
#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);
}不需要参数的机械手可以简单地实现为
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用户定义的机械手
https://stackoverflow.com/questions/29337774
复制相似问题