Jon*_*Mee 8 c++ setw insertion extraction-operator iomanip
一些标准iomanip函数需要参数.
我想知道这是如何实现的,例如,我可以用函数做类似的事情吗?这真的是我需要这个答案的解决方案,但我无法弄清楚如何做到这一点.
当我查看setw函数的定义时,例如在http://en.cppreference.com中,它将返回类型列为"未指定",它也只列出一个参数,而不是stream&参数.这是如何运作的?
这个问题有一个很好的答案,但对于个人提出这个问题; 此答案仅在与以下功能结合使用时才有用ios_base:
下面是一个用户定义的操纵器的简单示例,它使用一个类定义一个参数:
#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);
}
Run Code Online (Sandbox Code Playgroud)
不带参数的操纵器可以简单地实现为
std::ostream& custom_manip(std::ostream& os) { // do something with os and return os;}
Run Code Online (Sandbox Code Playgroud)
那是因为basic_ostream::operator<<有一个重载,它将一个指向函数的指针std::ostream& (*fp)(std::ostream&)作为它的右手边(例如,一个操纵器)
PS:N.Josuttis 的C++标准库描述了操纵器/自定义操纵器如何非常详细地工作,参见Sec.15.6.3 用户定义的操纵器
| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |