我正在寻找一个可移植且易于使用的C/C++字符串库,它可以帮助我使用Unicode输入/输出.在最好的情况下,它会将其字符串以UTF-8存储在内存中,并允许我将字符串从ASCII转换为UTF-8/UTF-16并返回.除此之外我不需要更多(好吧,自由执照不会受到伤害).我已经看到C++带有一个<locale>标题,但这似乎只能起作用wchar_t,可能是也可能不是UTF-16编码,而且我不确定这实际上有多好.
用例例如:在Windows上,unicode API需要UTF-16字符串,我需要转换ASCII或UTF-8字符串以将其传递给API.对于XML解析也是如此,UTF-16可能会附带,但我实际上只想用UTF-8进行内部处理(或者,就此而言,如果我内部切换到UTF-16,我需要转换为UTF-16无论如何).
到目前为止,我已经看过ICU了,这是非常巨大的.此外,它希望使用它自己的项目文件构建,而我更喜欢一个库,其中有一个CMake项目或易于构建(类似于编译所有这些.c文件,链接和好去)而不是像我的应用程序那样运送大型ICU.
你知道这样的图书馆吗?毕竟,这似乎是一个非常基本的问题.
SQLite和googletest带有一个非常易于使用的单文件版本,这使得在其他项目中使用它变得轻而易举,因为您只需要添加一个源文件.他们都使用home-brew工具来创建组合的源文件,所以我想知道是否有更通用的工具呢?它应该采用一个实现/头文件列表并吐出一个组合的头/源,并修复本地包含.我很好,如果它不处理条件包含/包括不同的#defines像Boost.Tuple/MPL之前使用它们.典型的目标库就像ICU.
你能不能给我说说怎么分辨一些帮助Clicked和Pressed?谢谢..那Released意味着什么?你能给我一个样品吗?
指示对象想要获取另一个对象的所有权的最佳方法是什么?到目前为止,我一直std::auto_ptr在公共接口中使用a ,因此客户端知道接口想要获取传递对象的所有权.
但是,最新的GCC告诉我auto_ptr已被弃用,所以我想知道推荐什么?boost::interprocess::unique_pointer看起来像个好人,但这真的是最好的解决方案吗?
我最近用valgrind调试了一些应用程序,我收到了非常奇怪的报告dlopen.
==1987== 32 bytes in 1 blocks are still reachable in loss record 1 of 2
==1987== at 0x4C24477: calloc (vg_replace_malloc.c:418)
==1987== by 0x570F31F: _dlerror_run (dlerror.c:142)
==1987== by 0x570EEE0: dlopen@@GLIBC_2.2.5 (dlopen.c:88)
<my call to dlopen>
==1987==
==1987== 264 bytes in 1 blocks are still reachable in loss record 2 of 2
==1987== at 0x4C25153: malloc (vg_replace_malloc.c:195)
==1987== by 0x400CD44: _dl_map_object_deps (dl-deps.c:506)
==1987== by 0x4012DA2: dl_open_worker (dl-open.c:326)
==1987== by 0x400E385: _dl_catch_error (dl-error.c:178)
==1987== by 0x40126C6: _dl_open (dl-open.c:615)
==1987== by …Run Code Online (Sandbox Code Playgroud) 我有一个Web应用程序,必须多次调用服务器.到目前为止,我有一个很长的嵌套回调链; 但我想用jQuery的when,then等功能.但是,在使用之后,我似乎无法再次运行then.
$
.when ($.get('pages/run-tool.html'))
.then (function (args)
{
// This works fine
alert(args);
$('#content').replaceWith (args);
$('#progress-bar').progressbar ({value: 0});
})
.then ($.get('pages/test.html'))
.done (function(args)
{
// This prints the same as the last call
alert (args);
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我猜它有一些范围问题,因为我可以看到get正在执行的第二个调用.使用两个不同的args变量没有帮助,因为传递给done函数的参数仍然是第一个get请求.
对于C++,有很多好的单元测试框架,但我找不到一个好的功能测试框架.通过功能测试,我的意思是接触磁盘的东西,需要整个应用程序到位等.
以防万一:什么框架有助于测试I/O是否有效等问题?我有一个手动滚动系统,它创建临时文件夹,复制一堆数据,所以测试总是在相同的环境中完成,但在我花更多时间在我的自定义框架之前 - 是否有好的一个已经在那里?
对于小集合或地图,通常使用有序向量而不是基于树的set/ 更快,map特别是对于5-10个元素.LLVM 在这种精神上有一些类,但没有真正的适配器可以提供std::map类似的接口备份std::vector.
任何(免费)实现这个吗?
编辑:感谢所有其他想法,但我真的对基于矢量的集合/地图感兴趣.我确实有一些具体情况,我倾向于创建大量的通常少于10个元素的集合/映射,我确实希望减少内存压力.例如,考虑三角形网格中顶点的邻居边缘,您可以轻松地使用每组3-4个元素的100k组.
我对WPF有一个相当有趣的问题.我有一个树视图,到目前为止选择项目工作正常.问题是,当用户在树视图的空白区域内单击时,我想取消选择当前选定的项目.默认情况下,树视图保持选中当前项目,并且我添加了一个上下文菜单选项以取消选择它,这是相当硬的:
// Note: This is done recursivly from the start, so it
// works for child items as well
treeView.ItemContainerGenerator.ContainerFromItem(treeView.SelectedItem) as TreeViewItem).IsSelected = false;
Run Code Online (Sandbox Code Playgroud)
此外,这是违反直觉的,因为它要求用户首先右键单击,其次,在用这种方式取消选择之后,用户不能再通过单击该项目来选择它.这应该怎么样?
编辑:更多信息:我已经TreeView为处理鼠标点击事件添加了处理程序,但发件人始终是一个TreeView实例,即使我直接点击一个TreeViewItem.如果我向我添加一个处理程序TreeView.ItemTemplate(即模板中的第一个子节点),当我点击空白区域时,我从未得到事件(这是相当合乎逻辑的).代码如下所示:
private void MyTreeView_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if ((sender as TreeViewItem) == null)
{
// Always triggered
System.Diagnostics.Trace.Write("Empty area clicked");
}
}
Run Code Online (Sandbox Code Playgroud)
而XAML就是:
<TreeView x:Name="MyTreeView" Margin="3" MouseUp="MyTreeView_MouseUp">
Run Code Online (Sandbox Code Playgroud)