我想创建一些处理编码的示例程序,特别是我想使用宽字符串,如:
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中工作
真正的答案:没有解决方案
在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)
谢谢.
我正在寻找允许一个进程进入休眠状态并允许其他进程唤醒它的最低延迟 IPC.
我正在寻找最低延迟的方法.到目前为止一些可行的方法
还有其他更好的想法?
任何特定于Linux的解决方案都可以.
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,即使这是常见的做法?他们宁愿不使用重新计算来解决问题吗?
谢谢
我想连接两个或更多gzip流而不重新压缩它们.
我的意思是我将A压缩为A.gz,B压缩为B.gz,我想将它们压缩为单个gzip(A + B).gz而不再使用C或C++进行压缩.
几点说明:
注意:它与此不重复,因为建议的解决方案不符合我的需要.
清除编辑:
我想连接几个压缩的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文件一起保存的数据,以便不运行解压缩过程,以及如何在压缩过程中找到这些数据.
在POSIX OS下,有一个信号API,它允许发送一个信号进行处理以使用kill来关闭它,你可以用sigaction捕获它并做你需要的事情;
但是,Win32不是POSIX系统,因此:
我不是在谈论GUI,我在谈论应该很好地关闭的TCP/IP服务器.这不像Windows服务那样运行.
我正在开发支持以下方面的跨平台项目:
我完全理解,如果没有适当的单元测试,就没有机会在所有这些平台上执行适当的QA.
但是,众所周知,编写单元测试非常无聊并且开发过程变慢(因为它很无聊并且开发FOSS软件不应该这样)
你如何设法编写好的单元测试代码而不是停止编写代码.
如果你至少得到这份工资,你可以说 - 至少我得到了一些东西,但如果你不这样做,那就更难了!
澄清:
我知道TDD应该是关键,但TDD遵循非常严格的限制:
对于以客户提供者风格开发的项目来说,情况确实如此,但对于不断发展的项目而言,这是不可能的.
有时候为了决定我需要什么功能,我必须创造一些东西并理解它是否运作良好,如果API是合适的并且帮助我或它是丑陋的并且不满足我.
我认为开发过程更像是进化,而不是根据规范进行开发.因为当我开始实现某些功能时,有时我不知道它是否会运行良好以及它将使用什么模型.
这是与TDD相悖的完全不同的发展方式.
另一方面,支持广泛的系统需要单元测试以确保现有代码在各种平台上工作,如果我想支持新的代码,我只需要编译代码并运行测试.
我将实现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只是一个具有官方规范(而不是草案)的
注意:不建议现有的JSON-RPC服务实现.
任何人?
编辑:任何人都使用JSON-RPC?
我使用C++语言环境方面的工作越多,我理解的就越多 - 它们就被打破了.
std::time_get- 与std::time_put(因为它在C strftime/strptime中)不对称,并且不允许使用AM/PM标记轻松解析时间.ru_RU.UTF-8).std::ctype 假设可以在每个字符的基础上完成上/下更新(情况转换可能会改变字符数并且它取决于上下文),这是非常简单的.std::collate - 不支持校对强度(区分大小写或不区分大小写).以及更多...
谢谢.
编辑:澄清链接无法访问:
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工作得更顺畅:
std::time_put::put)然而,它仍然是完美的.
编辑3:根据有关C++ 0x的最新说明,我可以看到std::time_get::get- 与...类似strptime和相反std::time_put::put.
我正在使用pthreads-win32来允许对windows进行线程支持.
我有一个使用pthreads的跨平台项目,我想让它在各种编译器和不同操作系统版本的Windows上工作.
至少,根据文档,pthreads-win32应该与MSVC一起工作,甚至提供MSVC构建.
但我不知道该库是否使用最新的MSVC编译器(如MSVC-2008)进行测试,以及是否支持64位窗口.
根据您自己的经验,您是否了解此库存在的任何问题?
笔记:
我只需要了解pthreads-win32的局限性.