VC6 - 如何使用用户定义的facet创建std :: locale?

时间:2013-11-20 12:55:12

标签: c++ vc6

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

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

1 个答案:

答案 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