3

我已经像这样重载了流插入运算符:

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;
}

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

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

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

那可能吗 ?

4

2 回答 2

5

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

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

于 2013-05-29T14:29:39.443 回答
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

于 2013-05-29T14:34:48.547 回答