小编Art*_*yom的帖子

C++ 0x中是否有任何本地化支持的更新?

我使用C++语言环境方面的工作越多,我理解的就越多 - 它们就被打破了.

  • std::time_get- 与std::time_put(因为它在C strftime/strptime中)不对称,并且不允许使用AM/PM标记轻松解析时间.
  • 发现最近,简单的数字格式可能产生在一定的语言环境(如非法UTF-8 ru_RU.UTF-8).
  • std::ctype 假设可以在每个字符的基础上完成上/下更新(情况转换可能会改变字符数并且它取决于上下文),这是非常简单的.
  • std::collate - 不支持校对强度(区分大小写或不区分大小写).
  • 在时间格式化中无法指定与全局时区不同的时区.

以及更多...

  • 有人知道C++ 0x中的标准方面是否有任何变化?
  • 有没有办法让这种变化变得重要?

谢谢.

编辑:澄清链接无法访问:

std::numpunct将千位分隔符定义为char.因此,当U + 2002中的分隔符 - 不同类型的空间时,它不能作为单个字符在UTF-8中再现,而是作为多字节序列.

在C API中,struct lconv将千位分隔符定义为字符串,并且不会遇到此问题.因此,当您尝试使用UTF-8语言环境在ASCII之外的分隔符格式化数字时,会生成无效的UTF-8.

要重现此错误,请使用imbued ru_RU.UTF-8locale 将1234写入std:ostream

EDIT2:我必须承认POSIX C本地化API工作得更顺畅:

  • 有strftime的反转 - strptime(strftime也一样std::time_put::put)
  • 由于上面提到的问题,数字格式没有问题.

然而,它仍然是完美的.

编辑3:根据有关C++ 0x的最新说明,我可以看到std::time_get::get- 与...类似strptime和相反std::time_put::put.

c++ locale localization internationalization c++11

11
推荐指数
1
解决办法
745
查看次数

pthreads-win32在各种Windows编译器上的可移植性

我正在使用pthreads-win32来允许对windows进行线程支持.

我有一个使用pthreads的跨平台项目,我想让它在各种编译器和不同操作系统版本的Windows上工作.

至少,根据文档,pthreads-win32应该与MSVC一起工作,甚至提供MSVC构建.

但我不知道该库是否使用最新的MSVC编译器(如MSVC-2008)进行测试,以及是否支持64位窗口.

根据您自己的经验,您是否了解此库存在的任何问题?

  • MSVC8,MSVC9,MSVC10有什么问题吗?
  • Windows x86_64有什么问题吗?
  • Windows Vista/Windows 7有任何问题吗?

笔记:

  • 甚至不尝试推荐使用Boost.Thread,我对此并不感兴趣.而且我对Boost.Thread库很熟悉
  • 我对使用Win32 API(缺少RW-Locks,条件变量等)重新发明Wheel感兴趣.
  • 我确实设法使用MSVC-2008和MinGW GCC-4.3编译项目,然后使用当前预编译的pthreads DLL轻松地对其进行单元测试.

我只需要了解pthreads-win32的局限性.

windows pthreads visual-c++ pthreads-win32

11
推荐指数
1
解决办法
5450
查看次数

用于gettext支持的CMake模块?

是否有一个好的,开源的,记录的CMake模块用于gettext支持?

我的意思是:

  • 从源中提取消息
  • 将消息合并到现有翻译
  • mo文件的编译
  • 安装mo文件.

因为CMake提供的普通宏对于真正的l10n支持来说是无用的.

任何人?

编辑:我为自己的项目创建了自己的cmake规则,但我认为这不是长期解决方案,尤其是当你有多个项目时.

如果有人指导我这样的模块,那将会非常有帮助.

localization cmake gettext xgettext

11
推荐指数
1
解决办法
2874
查看次数

使用非MSVC编译器在Windows下打开带有Unicode文件名的文件的fstream

当文件名是"Unicode"文件名时,我需要打开一个文件作为std :: fstream(或实际上任何其他std :: ostream).

在MSVC下我有非标准的扩展名std::fstream::open(wchar_t const *,...)?我可以用其他编译器做什么,比如GCC(最重要的)和Borland编译器.

我知道CRTL提供_wfopen但是它提供了C FILE *接口而不是io-stream,也许有一种非标准的方法来创建io-stream FILE *?有没有boost::ifstream像MSVC一样的Windows扩展?

c++ windows unicode gcc wide-api

10
推荐指数
2
解决办法
9345
查看次数

如何强制Doxygen显示完整的包含路径?

如何强制Doxygen显示完整的包含路径?

我的意思是:

我在以下目录结构中foo::bar::bee定义了一个类bee.hpp:

foo
foo/bar
foo/bar/bee.hpp
Run Code Online (Sandbox Code Playgroud)

Doxygen,当它文档foo::bar::bee类告诉你需要包含<bee.hpp>,但对于我需要的软件<foo/bar/bee.hpp>

我怎么能让Doxygen这样做?有没有选项提供"包括标志",如"-I"所以doxygen会知道基地在哪里?

笔记:

  • FULL_PATH_NAMES 已设置为默认值 YES
  • 我不想为每个类显式提供include头,因为它们太多了.我希望Doxygen自动执行此操作.

谢谢.

回答

组:

STRIP_FROM_INC_PATH    = relative/path/to/include/directory
Run Code Online (Sandbox Code Playgroud)

c++ doxygen include code-documentation

10
推荐指数
1
解决办法
2661
查看次数

在multipart/from-data中解析content-disposition header的文件名

根据RFC,在multipart/form-data content-disposition头文件名字段中接收作为参数的HTTP引用字符串 - 字符串之间的字符串'\'可以转义任何其他ascii字符.

问题是,Web浏览器不这样做.

IE6发送:

Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt"
Run Code Online (Sandbox Code Playgroud)

而不是预期

Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt"
Run Code Online (Sandbox Code Playgroud)

哪个应该z:tmptest.txt按照规则解析而不是z:\tmp\test.txt.

Firefox,Konqueror和Chrome不会逃脱"角色":

Content-Disposition: form-data; name="file"; filename=""test".txt"
Run Code Online (Sandbox Code Playgroud)

而不是预期

Content-Disposition: form-data; name="file"; filename="\"test\".txt"
Run Code Online (Sandbox Code Playgroud)

那么......你会如何建议处理这个问题?

有人有想法吗?

http multipartform-data content-disposition

10
推荐指数
2
解决办法
6747
查看次数

是否存在MSVC的依赖关系生成标志,如gcc的-M

是否存在MSVC的依赖关系生成标志,如gcc的-M标志.

我用过的每个C++编译器都有这种标志.如何使用MSVC cl编译器自动创建依赖项.

  1. 我只对最新的编译器版本感兴趣,即MSVC9或更高版本,但如果它适用于MSVC8,它也很好.
  2. 如果有内置的外部工具来做这件事(我的意思是,不是cl),那也没关系

dependencies gcc visual-c++

10
推荐指数
2
解决办法
1695
查看次数

如何在运行批处理文件时防止程序(.exe)失败的错误弹出消息框

我正在从批处理文件运行测试脚本.

因为它是测试,程序预计会偶尔失败.只要返回错误代码就是文件,所以我可以继续并将特定测试标记为失败.

但是,在Microsoft Windows下可执行文件的行为非常烦人 - 如果出现问题,弹出窗口就像:

此应用程序无法启动,因为找不到foo.dll,重新安装应用程序可能会解决问题

<OK>

甚至更好:

"......"处的指令引用"..."处的内存.

单击OK以终止程序
单击CANCEL以调试程序

结果是已知的 - 脚本执行阻止,直到有人按下"确定"按钮.当我们谈论可能在某些无头虚拟机中自动运行的自动脚本时,可能会出现问题.

有没有一种简单的方法来防止这种行为,只是让应用程序退出失败代码 - 而不改变程序本身的代码?

这有可能吗?

windows scripting popup

8
推荐指数
1
解决办法
1万
查看次数

GetEnvironmentStrings和stange值"= :: = :: \"

可能重复:
这些奇怪的环境变量是什么?

我正在尝试使用GetEnvironmentStrings Win32API函数来获取环境变量,并且我收到了一些非常奇怪的key = value对(用[]括起来的示例):

[=::=::\]
[=C:=C:\Users\username\value]
[=ExitCode=00000001]
[ALLUSERSPROFILE=C:\ProgramData]
[APPDATA=C:\Users\artik\AppData\Roaming]
[CommonProgramFiles=C:\Program Files (x86)\Common Files]
[CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files]
[CommonProgramW6432=C:\Program Files\Common Files]
...
Run Code Online (Sandbox Code Playgroud)

显然它似乎不是环境字符串的正确值,如那里所述http://msdn.microsoft.com/en-us/library/windows/desktop/ms683187%28v=vs.85%29.aspx

问题:

  • 预期的行为是什么?
  • 如果有"像=ExitCode为什么这样的特殊变量,例如getenv()不显示它们(getenv("=ExitCode")返回NULL)
  • 任何人都可以提供指向这些东西的文档/规范的指针.

c winapi environment-variables

8
推荐指数
0
解决办法
145
查看次数

Set-Cookie:过期属性,时钟偏差和Internet Explorer问题

有一个标题Max-Age,允许指定cookie的到期时间.不幸的是,Internet Explorer 6,7,8以及之后可能不支持Max-Age,并要求Expits标题以GMT为绝对日期.

特定客户端上的GMT时间和TZ设置可能不正确并不罕见.考虑未正确定义其时区的用户并手动调整时钟.

更重要的是,有时可能存在很多分钟的显着时钟偏差,用户不知道它们.

在这种情况下,其GMT时间可能会转移到几个小时.实际上,它会阻止服务器设置任何需要较短过期时间的cookie.如果TZ不正确,请考虑永远不会设置最长10分钟的cookie.

关于如何解决问题的原创想法(不起作用或有问题):

  1. 当然最好是使用Max-Age甚至指定两者,因为所有浏览器都会忽略"Expire"部分 - 但它在IE中不起作用
  2. 我想到的另一种方法是设置日期:标题希望IE会知道计算差异以解决时钟偏差......但它并没有帮助IE.
  3. 根据请求(使用JavaScript)从客户端获取时间,然后计算时钟差异,然后根据需要调整Expire标头.但是,它需要复杂的数据操作,包括向服务器提交时间的某种方式.

问题:

  1. 在IE中处理Cookie过期时间的最佳和常见做法是什么?
  2. 你如何在你的应用程序中做到这一点

cookies internet-explorer http

8
推荐指数
2
解决办法
7580
查看次数