【问题标题】:Which Boost UTF backend is currently used?当前使用的是哪个 Boost UTF 后端?
【发布时间】:2016-08-30 02:22:48
【问题描述】:

按照升压手册(http://www.boost.org/doc/libs/1_56_0/libs/locale/doc/html/using_localization_backends.html),

我可以使用以下方法设置 UTF 后端:

boost::locale::localization_backend_manager my = boost::locale::localization_backend_manager::global();
my.select("std");

现在有什么方法可以检查是否确实使用了 std 后端?

我似乎只能获取所有可用的后端,但不能获取当前活动的后端

boost::locale::localization_backend_manager lbm = boost::locale::localization_backend_manager::global();
auto s = lbm.get_all_backends();
for_each(s.begin(), s.end(), [](string& x){ cout << x << endl; });

【问题讨论】:

  • 我能看到的最多的是管理器上的get(),它可以让你获取当前的后端。然而后端的接口并没有提供任何识别它们的方法,并且所有的实现都隐藏在库的编译部分中,所以你甚至不能尝试转换,因为类型没有暴露。
  • 我认为你不能,至少在使用静态 global() 助手时不能。如果您手动将后端添加到列表中,您可能能够比较返回的 auto_ptrs 的基础指针。但由于select() 方法可能仅适用于类别的子集(允许组合不同的后端),因此我不确定这些信息有多大用处。

标签: c++ boost utf-8


【解决方案1】:

不是真的,不。由于多种原因,无法获取当前后端:

  • 没有可让您访问所用后端的公共 API 函数
  • localization_backend 使用 pimpl 习惯用法来推迟后端的实际实现。 localization_backend 或后端本身都没有反射
  • 此评论来自localization_backend.hpp

    后端通常在本地化后端中注册 经理并允许对不同后端的透明支持,因此用户 只需将应用程序链接到 正确的一个。

    ...

    每个后端都可以安装不同的默认优先级,因此 当您使用两个不同的后端时,您可以指定 priotiry 所以 此后端将根据其优先级进行选择。

这会使实现变得不必要地复杂化,因为在优先功能之上,可以为特定的语言环境类别设置特定的后端。 Boost.Locale 旨在“正常工作”它所配置的任何后端、透明度和二进制兼容性。正如评论者所说,这并不是真正有用的信息,因为您正在使用此库来抽象出库/平台特定的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多