我尝试使用以下代码行创建语言环境:
std::locale loc(std::locale::classic(), new comma);
comma
的定义是:
struct comma : std::numpunct<char> {
char do_decimal_point() const { return ','; }
};
我认为它应该可行,因为我在facet的MSDN文档中看到了类似的构造函数调用。不幸的是我得到了错误:
错误C2664:'_ _ thishisall std :: locale :: std :: locale(const char *,int)':不能在'const char *'中的'const class std :: locale'中转换参数号1
你知道吗,我怎么能做对吗?
Stackoverflow上有一些答案,这样做是正确的(this或this one)。但似乎旧的VC6编译器不支持此构造函数(尽管VC6文档中的示例使用它)。但是必须有一种方法可以在VC6中使用facet,否则它不会成为文档的一部分。
答案 0 :(得分:1)
要使用用户定义的facet创建std :: locale,我们可以使用_ADDFAC
。在documentation to the locale
constructor我发现了这个有用的提示:
[...]您应该写
_ADDFAC(loc, Facet)
以返回一个新的locale
,它将方面Facet
添加到区域设置loc
,因为并非所有翻译人员都支持其他模板构造函数
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