g-var.com | G-VAR's Blog

Recent Posts

Full Year Index

Posts in “2017”

Rust 1.2.2 | Display

Thu, Jul 6, 2017
转载请注明出处! 译文链接:Rust 1.2.2 | Display 英文原文:Display fmt::Debug看起来几乎是既不紧凑也不整洁,但通常利于进行输出形式的定制。而通过手动实现fmt::Display是可以实现紧凑又整洁的,其使用了{}输出标记。实现形式如下: // (通过`use`)导入`fmt`模块来使其可见 use std::fmt; // 定义一个用于实现`fmt::Display`的结构体,只是一个简单tuple struct, // 包含一个绑定到名称为`Structure`结构体`i32`类型数据 struct Structure(i32); // 为了使用`{}`标记,必须为此类型手动实现`fmt::Display`特性 impl fmt::Display for Structure { // 此特性需要`fmt`的确切签名 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { // 直接将第一个元素写入提供的输出流:`f`中, // 返回一个`fmt::Result`,其表示了是否操作成功, // 注意`write!`的语法与`println!`类似。 write!(f, "{}", self.0) } } fmt::Display可能会比fmt::Debug更整洁,但这暴露了std库的一个问题。模糊类型该如何显示?例如,如果std库为所有的Vec<T>实现了一个单一类型,那么该是何种风格?下面两种的一种? Vec<path>:/:/etc:/home/username:/bin(以:分割) Vec<number>:1,2,3(以,分割) 都不是,因为所有的类型都没有实际的风格,并且std库也不会假定一个。Vec<T>或者其它通用容器并没有实现fmt::Display。这些通用情况会使用fmt::Debug。 这并不是个问题,因为任何新的容器类型都不是通用的,可以实现fmt::Display。 use std::fmt; // 导入`fmt` // 拥有两个数的结构体。继承了`Debug`,来与`Display`进行对比 #[derive(Debug)] struct MinMax(i64, i64); // 为`MinMax`实现`Display` impl fmt::Display for MinMax { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { // 使用`self.

VS2013编译Qt 4.8.6 x64

Thu, Apr 13, 2017
转载请注明出处! 原文链接:VS2013编译Qt 4.8.6 x64 下载Qt 4.8.6源码 下载地址 源码配置 将下载的qt-everywhere-opensource-src-4.8.6.zip解压,如:E:/qt-everywhere-opensource-src-4.8.6 对源文件进行修改,修改内容如下: 找到./mkspecs/win32-msvc2013/qmake.conf文件,将 QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF QMAKE_LFLAGS_DEBUG = /DEBUG 修改为 QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO QMAKE_LFLAGS_DEBUG = /DEBUG /INCREMENTAL:NO 找到./src/3rdparty/webkit/Source/JavaScriptCore/wtf/HashSet.h文件,将 return m_impl.add(value); 修改为 typedef typename HashSet<T, U, V>::iterator iter_type; auto& p = m_impl.add(value); return make_pair((iter_type)p.first, p.second); 再将 return m_impl.template addPassingHashCode<T, T, Adapter>(value, value); 修改为: typedef typename HashSet<Value, HashFunctions, Traits>::iterator iter_type; auto& p = m_impl.