自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (5)
  • 收藏
  • 关注

原创 rust用BTreeMap保存closure

use std::collections::BTreeMap;struct Foo{ entry:BTreeMap<i32,Box<Fn(i32)->i32>>,}impl Foo{ fn new()->Foo{ Foo{ entry:BTreeMap::new(), } } fn add<F:Fn(i32)->

2015-08-31 15:06:15 1859

原创 rust用struct保存特定trait的引用

结构体保存一个实现了某个trait的引用,只要是保存引用就必须显式的加lifetime,实现如下: (只是保存而已,记不住…)trait DeriveTrait{ fn hello(&self)->i32;}struct Base<'a,T:DeriveTrait+'a>{ pt:&'a mut T,}impl<'a,T:DeriveTrait> Base<'a,T> {

2015-08-31 12:37:38 2529

原创 trait里的默认函数会为每个类型拷贝一份

注意这儿说的是“函数”不是“方法”,也就是说不带self的函数trait Foo{ fn foo(){ println!("foo"); }}struct Bar1;struct Bar2;impl Foo for Bar1{}impl Foo for Bar2{}fn main(){ println!("{:p}",&Bar1::foo); p

2015-08-30 22:35:31 624

原创 理解rust里的移动语义(1)

rust里的移动会发生内容的复制还是名字的取代而不发生复制? 这段代码展示的内容 1. move语义其实就是复制,可以看到move前后的两个变量f,f2的地址是不一样的 2. move只会drop一次,并且是move之后的那个变量f2 3. move之后原来的变量f就失效了,不可以直接访问。这儿通过保存了f的raw指针,通过unsafe查看f对应地址处的数据,可以看到数据已经变成无意义的数据

2015-08-30 19:48:33 2234

原创 rust:打印变量地址

fn main(){ let a:i32 = 5; //&a先转成raw指针,然后再把指针转成usize,这个可以print的 let addr = &a as *const i32 as usize; println!("addr:0x{:X}",addr); //为了验证刚才的地址是不是正确的,我们修改这个指针指向的数据 //pa就是addr对应的r

2015-08-30 14:52:25 8527 2

原创 rust raw pointer使用方法(4)

4、这儿是继续上一篇往下写,上一篇是把*mut c_void指针转成*mut T类型,然后用UFCS来调用,今天是把*mut c_void转成*mut Self来使用,这个其实只需要添加:Sized就可以了,具体代码如下:use std::os::raw::{c_void};//注意这儿必须加Sized,不然p_this转*mut Self编译器会报错,这儿感谢rust 2群里的@ELTONtr

2015-08-28 13:31:14 1474

原创 rust raw pointer使用方法(3)

3、这一篇写个稍微复杂一点的这个例子里的函数接收*mut c_void指针,然后把指针转成T类型的p_self raw指针,再使用rust的UFCS的函数调用方法调用T的方法(T的静态函数就不需要这么复杂了,直接T::xxxx就可以,连p_self都不用传进来)另外还有个比较绕脑子的地方,就是impl Bar<Foo> for Foo,希望大家能仔细看看这儿关键需要掌握的就是 1. &mut f=

2015-08-27 07:53:25 1368

原创 rust里使用thread_local!

thread_local使用很简单,只需要使用这个宏就可以了,不需要任何的use,但是释放资源的时候一定要注意,实现Drop是不可行的下面的代码的Drop是不可行的:use std::ops::Drop;struct Foo;impl Foo{ fn print(&self){ println!("print foo"); } //fn drop(&self){

2015-08-24 14:13:49 6376

原创 rust条件编译

直接看这个吧,用的挺多的条件编译,看起来也挺直观的 http://angrylawyer.github.io/rust-sdl2/src/rand/os.rs.html贴过来大家参考下:pub use self::imp::OsRng;#[cfg(all(unix, not(target_os = "ios")))]mod imp { extern crate libc; use

2015-08-23 18:57:11 2152

原创 显示rust测试时候的print信息

cargo test命令默认是关闭了test里的print输出,这对有时候需要看输出信息很不方便,官方添加了两种方法: https://github.com/rust-lang/rust/commit/6eaa21635e6c6c90e1a0579876bc63581f661f7d 1. 添加--nocapture 参数 2. 设置RUST_TEST_NOCAPTURE 环境变量目前第一种方

2015-08-23 18:31:04 5527

原创 rust一些习惯表达方法

学习rust的朋友可能经常看到Result和Option,虽然不一定直接看到他们本身,但是他们的方法还是常见的,比如:xxx.ok().expect(“…”); 这个xxx一般就是某个函数返回的Result类型了,下面就详细的讲解下他们的来源现在看看rust book里的那个guess game,有这么一段: http://doc.rust-lang.org/book/guessing-game

2015-08-23 13:41:54 12784 4

原创 用泛型实现rust返回类型自动推导

rust可以根据后续的类型提示自动选择返回值类型#[derive(Debug)]struct Foo(i32);#[derive(Debug)]struct FooBar(i32,i32);trait New{ fn new(i:i32)->Self;}impl New for Foo{ fn new(i:i32)->Foo{ Foo(i) }}im

2015-08-22 21:13:21 3415

原创 在rust里使用std::include!宏来包含其他文件

main.rs 里使用include!宏包含了另一个文件foo.rs,这样另一个文件就会被直接包含进来,这个在实现一个很大的impl的时候比较有用,比如这个例子里struct Foo的impl被放在了main.rs和foo.rs里#[macro_use]use std::*;include!("foo.rs");fn main() { let f = Foo; f.print1(

2015-08-22 14:26:30 4443 1

原创 rust raw pointer使用方法(2)

2、指针转换,传递和解引用 这儿用了windows里的一个常用的结构体RECT来做示范 LPRECT是RECT的*mut raw指针,也就是解引用后可以修改指向的数据的值,具体的说明见注释use std::os::raw::{c_void,c_int};//play run on *nix,so use c_int intead of c_long#[derive(Debug)]struct

2015-08-21 11:00:55 1788

原创 rust raw pointer使用方法(1)

1、raw pointer的声明与赋值 这个是c_void类型的用法,可以看到c_void类型的变量是没法赋值的,估计是故意被设计成这样防止滥用,只有*const c_void和*mut c_void才赋值use std::os::raw::{c_void};const NULL:* mut c_void = 0 as *mut c_void;fn main() { let mut c:*

2015-08-21 10:32:10 2945

原创 给rust链接windows下的资源或者c/c++的.o文件

本文是用编译脚本(build.rs)的方式链接windows下的资源原理编译脚本的用法可以看下面这个官方的链接 http://doc.crates.io/build-script.html下面这个是官方的例子,是用gcc将.c文件生成.o,然后ar打包,最后cargo build链接// build.rsuse std::process::Command;use std::env;use st

2015-08-18 16:59:16 4099

原创 通过trait reference来保存 函数、closure 的调用入口

从网上摘录了一些Fn,FnMut,FnOnce的说明,具体可以看看这个链接,不过这个是在rust 1.0之前写的,有些东西过时了 http://smallcultfollowing.com/babysteps/blog/2014/11/26/purging-proc/ 这个是以前的Fn,FnMut,FnOnce的声明,现在1.2.0已经改变了,不过这个更好理解:trait Fn<A,R> { f

2015-08-16 11:06:20 904

原创 rust sugar

&self就是self:&Self,其中Self是调用者的类型struct Rectangle { p1: Point, p2: Point,}impl Rectangle { // This is an instance method // `&self` is sugar for `self: &Self`, where `Self` is the type

2015-08-15 10:57:34 763

原创 rust默认赋值的方法

可以用如下方法给rust的struct默认值方法1,使用 Default::default()给变量赋值:fn main(){let i: i8 = Default::default();let (x, y): (Option<String>, f64) = Default::default();let (a, b, (c, d)): (i32, u32, (bool, bool)) = Def

2015-08-15 10:14:22 9991

原创 更改rust工程依赖库的代码放置路径

cargo build会把rust工程的外部依赖的源代码放到~/.cargo目录里(windows下在 user/xxx/.cargo目录里),这个对于移动办公而言很麻烦,需要每次把依赖的库复制带走,否则每次换个电脑都需要重新下载依赖库。这个可以通过设置CARGO_HOME来设置放置依赖代码的位置,如果要设置固定路径直接设置环境变量即可,如下图所示: 在移动办公的时候设置固定路径效果还是不好,如果

2015-08-11 13:34:10 6335

原创 给sublime text3添加rust自动提示

rust sublime text 3 自动提示 auto completion 好用的ide

2015-08-11 12:03:45 7483

Iar_vs2010

iar 工程转成vs2010工程

2015-05-20

在Go包里添加C代码并且不使用CGO(不需要gcc)

在Go包里添加C代码并且不使用CGO(不需要gcc)http://blog.csdn.net/varding/article/details/12677315 上面这个文章里的测试代码工程打包 可能有些朋友对golang了解的还不是很透彻,编译什么的还有些疑问,所以我把这个工程打包传上来了,希望大家能一次测试通过 同时也对go build , go test ,go install之类的使用有个整体的了解

2013-10-13

Programming.in.Go

Programming.in.Go 完整版

2013-01-24

wxwidgets集成IE浏览器控件

wxwidgets里使用IE控件的方法 里面包含了: 1.网上下载的源代码工程 2.我修改后可以直接编译的工程 3.一个编译好了的release程序可以直接运行

2010-06-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除