C++ VC6-如何使用用户定义的方面创建std::locale?

C++ VC6-如何使用用户定义的方面创建std::locale?,c++,visual-c++-6,C++,Visual C++ 6,我尝试使用以下代码行创建区域设置: std::locale loc(std::locale::classic(),新逗号); 逗号的定义是: struct comma : std::numpunct<char> { char do_decimal_point() const { return ','; } }; 结构逗号:std::numpunct{ char do_decimal_point()常量{return',';} }; 我认为它应该可以工作,因为我在MSDN

我尝试使用以下代码行创建区域设置:

std::locale loc(std::locale::classic(),新逗号);
逗号的定义是:

struct comma : std::numpunct<char> {
    char do_decimal_point() const { return ','; }
};
结构逗号:std::numpunct{ char do_decimal_point()常量{return',';} };
我认为它应该可以工作,因为我在MSDN文档中看到了类似的构造函数调用。不幸的是,我得到了一个错误:

错误C2664:“\uuuu thiscall std::locale::std::locale(const char*,int)”:无法从“const char*”中的“const class std::locale”转换参数1

你知道,我怎样才能把它做好


有一些关于Stackoverflow的答案,可以这样做(,或)。但是,旧的VC6编译器似乎不支持此构造函数(尽管VC6文档中的示例使用了它)。但是必须有一种方法可以在VC6中使用facet,否则它就不会成为文档的一部分。

要使用用户定义的facet创建std::locale,我们可以使用
\u ADDFAC
。在中,我发现了以下有用的提示:

[…]您应该编写
\u ADDFAC(loc,Facet)
以返回一个新的
区域设置
,该区域设置将Facet
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
std::istringstream iss(“333444”);//逗号是小数点
std::locale loc(std:_ADDFAC(iss.getloc(),新逗号));
国际空间站imbue(loc);
iss>>e;

std::cout要使用用户定义的方面创建std::locale,我们可以使用
\u ADDFAC
。在中,我发现了以下有用的提示:

[…]您应该编写
\u ADDFAC(loc,Facet)
以返回一个新的
区域设置
,该区域设置将Facet
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
std::istringstream iss(“333444”);//逗号是小数点
std::locale loc(std:_ADDFAC(iss.getloc(),新逗号));
国际空间站imbue(loc);
iss>>e;

std::难道你对VC6非常乐观吗。我很惊讶仍然有MSDN文档,但它肯定不再受支持了。也就是说,如果文档有误,微软不会修复它。@mAlters:我对参与stackoverflow.com的人很乐观,但更多的时候我没有得到一个有用的答案,但不幸的是,没有人愿意深入研究VC6的部分。嗯,有更多的人致力于复兴渡渡鸟,而不是希望看到VC6回归的人。你对VC6非常乐观。我很惊讶仍然有MSDN文档,但它肯定不再受支持了。也就是说,如果文档有误,微软不会修复它。@mAlters:我对参与stackoverflow.com的人很乐观,但更多的时候我没有得到一个有用的答案,但不幸的是,没有人愿意深入研究VC6的部分。嗯,与希望看到VC6回归的人相比,有更多的人致力于恢复dodo。该编译器的最佳来源仍然是1998年或1999年的独立MSDN安装(您无法在win 7 64位上安装:()。多年来对MSDN文档的编辑改写了过去,因为VC6的工作方式与后来的缓慢编译器类似。使用VC6编写STL非常困难,因为有许多部分实现。你是对的,我的机器上的VC6在虚拟32位XP环境下运行。对于一些旧的大型项目,我需要它,因为它们很难移植到其中一个新的IDE。缺点是,在VC6中使用STL时,我必须始终小心。该编译器的最佳源代码仍然是1998或1999年的独立MSDN安装(您无法在win 7 64位上安装:()。多年来对MSDN文档的编辑改写了过去,因为VC6的工作方式与后来的缓慢编译器类似。使用VC6编写STL非常困难,因为有许多部分实现。你是对的,我的机器上的VC6在虚拟32位XP环境下运行。对于一些旧的大型项目,我需要它,因为它们很难移植到其中一个新的IDE。缺点是,我在使用VC6的STL时总是要小心。