【问题标题】:c++ get stream modifier from << overloadc ++从<<重载获取流修饰符
【发布时间】:2013-05-29 14:27:21
【问题描述】:

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

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准备好参数作为参数的重载运算符

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

这可能吗?

【问题讨论】:

标签: c++ stream overloading


【解决方案1】:

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

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

【讨论】:

  • 正是我想要的!非常感谢!
【解决方案2】:

来自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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2022-06-16
    • 2011-03-19
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多