iomanip函数是如何实现的
How are iomanip functions Implemented?
一些标准的iomanip
函数接受一个参数。
我想知道这是如何实现的,例如,我可以用一个函数做类似的事情吗?这确实是我需要的答案,但我不知道如何做到这一点。
例如,当我在中查找setw
函数的定义时http://en.cppreference.com它将返回类型列为"0";未指定";,并且它也只列出一个参数,而不是同时采用stream&
参数。这是怎么回事?
读者注意:
这个问题有一个很好的答案,但对于查找这个问题的个人来说;这个答案只有与ios_base
提供的以下功能相结合才有用:
xalloc
iword
pword
下面是一个用户定义的操纵器的简单示例,该操纵器采用一个使用类定义的参数:
#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++标准库详细描述了操纵器/自定义操纵器的工作方式,请参见第15.6.3节用户定义操纵器
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如何实现内部实现依赖于模板参数的类
- 我的 PRNG 实现与我尝试复制的实现有何不同?