【问题标题】:C++11: is std::locale::empty() even a thing?C ++ 11: std::locale::empty() 甚至是一件事吗?
【发布时间】:2017-06-04 19:57:59
【问题描述】:

尝试从 StackOverflow 编译 some code,基本上,这些行:

std::wifstream wif(filename);
wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));

GCC 版本:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0

我得到一个编译错误:

'empty' 不是 'std::locale' 的成员

我同意编译器,检查了cppreference 之类的文档 - 没有关于此类的信息。头文件也不显示任何内容。

我想知道,这只是我还是其他主题的示例代码......

它可以是 MSVC 功能吗? (我使用的示例代码来自与 Windows 相关的问题)

【问题讨论】:

标签: c++ c++11 locale


【解决方案1】:

这是对语言环境类的特定于平台的扩展,它曾经在this MSVC documentation* 中进行了描述:

在这个实现中,还可以调用静态成员函数:

static locale empty( );

构造一个没有分面的locale 对象。它也是一个透明的语言环境;如果模板函数 has_facetuse_facet 在透明语言环境中找不到请求的构面,它们会先查询全局语言环境,然后如果是透明的,则查询经典语言环境。

* MSVC 文档链接现在已经过时,最好的替换请参阅this documentation page

【讨论】:

  • 我猜这句话 "In this implementation" 是关键 - 它是一个特定于平台的扩展而不是标准成员。
  • @TobySpeight 确实是 MSVC 提供的扩展(我猜,实际上只适用于部分版本)
  • 赞已经死了。更新版本:docs.microsoft.com/en-us/cpp/standard-library/…
  • @phuclv 我猜你的意思是链接,谢谢,会更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多