gpt4 book ai didi

c++ - VC6 - 如何创建具有用户定义方面的 std::locale?

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:04 30 4
gpt4 key购买 nike

我尝试使用以下代码行创建语言环境:

std::locale loc(std::locale::classic(), new comma);

逗号的定义是:

struct comma : std::numpunct<char> {
char do_decimal_point() const { return ','; }
};

我认为它应该工作,因为我在 MSDN 文档中看到一个类似的构造函数调用 facet .不幸的是我得到了错误:

error C2664: '__thiscall std::locale::std::locale(const char *,int)' : cannot convert parameter number 1 from 'const class std::locale' in 'const char *'

你知道,我怎样才能做对吗?

在 Stackoverflow 上有一些答案,这些答案是正确的(thisthis one)。但似乎旧的 VC6 编译器不支持此构造函数(尽管 VC6 文档中的示例使用它)。但是必须有一种方法可以在 VC6 中使用分面,否则它不会成为文档的一部分。

最佳答案

要创建具有用户定义面的 std::locale,我们可以使用 _ADDFAC。在documentation to the locale constructor我发现了这个有用的提示:

[...] you should write _ADDFAC(loc, Facet) to return a new locale that adds the facet Facet to the locale loc, since not all translators currently support the additional template constructors

VC6 似乎不支持额外的模板构造函数。

示例代码:

std::istringstream iss("333,444"); // comma is decimal mark
std::locale loc(std::_ADDFAC(iss.getloc(), new comma));
iss.imbue(loc);
iss >> e;
std::cout << e << std::endl; // prints 333.444

关于c++ - VC6 - 如何创建具有用户定义方面的 std::locale?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20096566/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com