c ++从<<获取流修饰符超载

时间:2013-05-29 14:27:22

标签: c++ stream overloading

我像这样重载了流插入操作符:

template<class Ch, class Tr, class word_type>
std::basic_ostream<Ch, Tr>&
operator << (std::basic_ostream<Ch, Tr>& s, const Mabit::mabit<word_type>& obj)
{
  s << obj.to_string(Mabit::DEC, ',');
  return s;
}

(mabit是我希望重载工作的类)

也就是说,因为我可以为to_string方法提供不同的参数,我希望能够在某种程度上使用标准流修饰符,如std::decstd::hex ...我可以从重载运算符中检索它们以准备好参数作为to_string

的参数

如果我也可以使用该语言环境(为数千个提取分隔符),那么第二个参数也会有帮助...

这可能吗?

2 个答案:

答案 0 :(得分:5)

您可以使用std::basic_ostream::flags()来确定是否使用了格式说明符。

http://en.cppreference.com/w/cpp/io/ios_base/flags

答案 1 :(得分:1)

来自http://www.cplusplus.com/reference/locale/numpunct/thousands_sep/

#include <iostream>
#include <locale>
using namespace std;

int main ()
{
  int q=10977;
  char separator = use_facet<numpunct<char> >(cout.getloc()).thousands_sep ();
  cout << q/1000 << separator << q%1000 << endl;
  return 0;
} 

我想你可以在这个例子中用你的流参数替换cout