小编Art*_*yom的帖子

在MSVC++中编码源字符集编码,如gcc"-finput-charset = CharSet"

我想创建一些处理编码的示例程序,特别是我想使用宽字符串,如:

wstring a=L"grüßen";
wstring b=L"???? ????!";
wstring c=L"??";
Run Code Online (Sandbox Code Playgroud)

因为这些是示例程序.

对于将源代码视为UTF-8编码文本的gcc,这绝对是微不足道的.但是,简单的编译在MSVC下不起作用.我知道我可以使用转义序列对它们进行编码,但我更愿意将它们保存为可读文本.

是否有任何选项可以指定为"cl"的命令行开关以使其工作?那里有任何命令行开关,如gcc'c-finput-charset

谢谢,

如果不是,你会如何建议让文字对用户自然?

注意:将BOM添加到UTF-8文件不是一种选择,因为它变得不可由其他编译器编译.

注意2:我需要它在MSVC版本> = 9 == VS 2008中工作

真正的答案:没有解决方案

c++ unicode visual-c++

15
推荐指数
2
解决办法
6419
查看次数

写入std :: string是否合法?

在std :: string中,只有const成员来获取数据,如c_str().但是我可以获得对字符串via的第一个元素的引用operator[],我可以写入它.

例如,如果我有功能:

void toupper(char *first,char *last_plus_one);
Run Code Online (Sandbox Code Playgroud)

我可以直接写向量获取指向第一个元素的指针:

vector<char> message // has "Some Message";
toupper(&message[0],&message[0]+message.size());
Run Code Online (Sandbox Code Playgroud)

我可以用std :: string做同样的事情吗?

string message="Some Message";
toupper(&message[0],&message[0]+message.size());
Run Code Online (Sandbox Code Playgroud)

标准是否保证内存的位置实际上是线性的?即:

&(*(message.begin()+n)) == &message[n]
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ string standards

14
推荐指数
3
解决办法
3663
查看次数

Linux下进程之间的最低延迟通知方法

我正在寻找允许一个进程进入休眠状态并允许其他进程唤醒它的最低延迟 IPC.

我正在寻找最低延迟的方法.到目前为止一些可行的方法

  1. 将一个字节写入管道并从中读取.
  2. 将一个字节写入套接字并从中读取.
  3. 发送信号(杀死)并等待它(sigwait)
  4. 使用sem_post/sem_wait

还有其他更好的想法?

任何特定于Linux的解决方案都可以.

linux ipc

14
推荐指数
2
解决办法
3758
查看次数

为什么VC++字符串不被引用计数?

STL标准不要求从std :: string中重新计算.但事实上,大多数C++实现都提供了refcounted,copy-on-write字符串,允许您将值作为基本类型传递.此外,这些实现(至少g ++)使用原子操作使这些字符串无锁和线程安全.

简单的测试显示了写时复制语义:

#include <iostream>
#include <string>

using namespace std;

void foo(string s)
{
    cout<<(void*)s.c_str()<<endl;
    string ss=s;
    cout<<(void*)ss.c_str()<<endl;
    char p=ss[0];
    cout<<(void*)ss.c_str()<<endl;
}

int main()
{
    string s="coocko";
    cout<<(void*)s.c_str()<<endl;
    foo(s);
    cout<<(void*)s.c_str()<<endl;
}
Run Code Online (Sandbox Code Playgroud)

在使用非常数成员后,只有两个地址完全打印.

我使用HP,GCC和Intel编译器测试了这段代码,得到了类似的结果 - 字符串可以作为写时复制容器.

另一方面,VC++ 2005清楚地表明每个字符串都是完全复制的.

为什么?

我知道VC++ 6.0中存在一个错误,它具有非线程安全的引用计数实现,导致随机程序崩溃.这是什么原因?他们只是害怕再使用ref-count,即使这是常见的做法?他们宁愿不使用重新计算来解决问题吗?

谢谢

c++ string reference-counting copy-on-write visual-c++

13
推荐指数
4
解决办法
5202
查看次数

如何连接两个或多个gzip文件/流

我想连接两个或更多gzip流而不重新压缩它们.

我的意思是我将A压缩为A.gz,B压缩为B.gz,我想将它们压缩为单个gzip(A + B).gz而不再使用C或C++进行压缩.

几点说明:

  • 即使你只能连接两个文件,gunzip会知道如何处理它们,大多数程序都无法处理两个块.
  • 我曾经看过一个代码示例,只是通过解压缩文件然后操作原始文件,这比正常的重新压缩要快得多,但仍然需要O(n)CPU操作.
  • 不幸的是,我找不到我曾经发现的这个例子(仅使用解压缩连接),如果有人可以指出它我会很高兴.

注意:它与不重复,因为建议的解决方案不符合我的需要.

清除编辑:

我想连接几个压缩的HTML pices,并根据请求将它们作为一个页面发送到浏览器:"Accept-Encoding:gzip",带有respnse"Content-Encoding:gzip"

如果流的简单结合cat a.gz b.gz >ab.gz,Gecko(firefox)和KHTML Web引擎只获得第一部分(a); IE6没有显示任何内容,Google Chrome正确显示第一部分(a),第二部分(b)显示为垃圾(根本不解压缩).

只有Opera处理得这么好.

所以,我需要创建一个单一的几个块的gzip流,而不需要重新压缩发送.

更新:我在zlib的例子中找到了gzjoin.c,它只使用解压缩.问题是减压仍然比较简单memcpy.

它仍然比最快的gzip压缩快4倍.但这还不够.

我需要的是找到我需要与gzip文件一起保存的数据,以便不运行解压缩过程,以及如何在压缩过程中找到这些数据.

c++ gzip concatenation

13
推荐指数
2
解决办法
5311
查看次数

Win32 API模拟发送/捕获SIGTERM

在POSIX OS下,有一个信号API,它允许发送一个信号进行处理以使用kill来关闭它,你可以用sigaction捕获它并做你需要的事情;

但是,Win32不是POSIX系统,因此:

  • 如何处理可能出现的关闭事件,例如"任务管理器"中的"结束进程"?
  • 将关闭信号发送到Win32应用程序的标准API是什么?

我不是在谈论GUI,我在谈论应该很好地关闭的TCP/IP服务器.这不像Windows服务那样运行.

windows winapi posix shutdown sigterm

12
推荐指数
2
解决办法
2万
查看次数

如何编写单元测试而不是厌倦了FOSS项目的开发?

我正在开发支持以下方面的跨平台项目:

  • 四个C++编译器 - GCC,MSVC,SunStudio,Intel,
  • 五种操作系统:Linux,OpenSolaris,FreeBSD,Windows,Mac OS X.

我完全理解,如果没有适当的单元测试,就没有机会在所有这些平台上执行适当的QA.

但是,众所周知,编写单元测试非常无聊并且开发过程变慢(因为它很无聊并且开发FOSS软件不应该这样)

你如何设法编写好的单元测试代码而不是停止编写代码.

如果你至少得到这份工资,你可以说 - 至少我得到了一些东西,但如果你不这样做,那就更难了!

澄清:

我知道TDD应该是关键,但TDD遵循非常严格的限制:

  1. 你有确切的规格.
  2. 您已完全定义了API.

对于以客户提供者风格开发的项目来说,情况确实如此,但对于不断发展的项目而言,这是不可能的.

有时候为了决定我需要什么功能,我必须创造一些东西并理解它是否运作良好,如果API是合适的并且帮助我或它是丑陋的并且不满足我.

我认为开发过程更像是进化,而不是根据规范进行开发.因为当我开始实现某些功能时,有时我不知道它是否会运行良好以及它将使用什么模型.

这是与TDD相悖的完全不同的发展方式.

另一方面,支持广泛的系统需要单元测试以确保现有代码在各种平台上工作,如果我想支持新的代码,我只需要编译代码并运行测试.

unit-testing

12
推荐指数
2
解决办法
981
查看次数

JSON-RPC和Json-rpc服务发现规范

我将实现JSON-RPC Web服务.我需要这个规格.到目前为止,我发现只有一种资源可以被称为真正的规范:

但是我已经看到像Dojo这样的JavaScript框架主动使用JSON-RPC SMD

但它需要JSON Schema规范,但它会重定向到错误的URL作为参考.到目前为止,我发现了以下内容:

它仍然是草案......

任何人都可以指出一些实际的规格......至少官方更新了什么?因为看起来实现JSON-RPC 1.0可能还不够,至少对于像Dojo这样的框架来说.还是我错了?

问题:

  • JSON-RPC 1.0规范的实现是否足以为大多数现代客户端提供JSON-RPC服务,以及有多少客户端(如果有的话)实际支持JSON-RPC 1.0之外的功能(SMD,Schema,2.0) ?

    因为看起来JSON-RPC 1.0只是一个具有官方规范(而不是草案)的

  • 如果我应该实现SMD,或者建议有人可以指向Json Schema服务映射描述的官方,最新规范,还是我发现的链接真的是"规范?"
  • JSON-RPC 2.0,SMD和JSON-Schema草案是否足够稳定以实现它们?

注意:不建议现有的JSON-RPC服务实现.

任何人?

编辑:任何人都使用JSON-RPC?

json specifications rfc json-rpc smd

12
推荐指数
1
解决办法
4532
查看次数

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
查看次数