小编dir*_*ine的帖子

c ++ 11异步延续或尝试.then()语义

下面的代码基于Herb Sutter关于.then()类型延续的实现想法.

  template<typename Fut, typename Work>
auto then(Fut f, Work w)->std::future<decltype(w(f.get()))>
  { return std::async([=] { w(f.get()); }); }
Run Code Online (Sandbox Code Playgroud)

这可以像auto next = then(f, [](int r) { go_and_use(r); });或类似地使用.

这是一个很好的想法,但它现在不起作用(期货只是移动而不是可复制的).我喜欢这个想法,因为它可能出现在即将推出的c ++版本中,据我所知(尽管是.then()甚至是等待.)

在让期货共享或类似之前,我想知道堆栈溢出社区会特别考虑改进和建议(甚至是共享期货)对这种实现的看法?

在此先感谢您的任何建议.

(我知道这是一个修复,直到基于标准的机制存在,因为它将花费一个线程(也许))).

c++ c++11 stdasync

16
推荐指数
1
解决办法
3091
查看次数

将向量转换为数组并返回

我试图找出从矢量转换为数组并返回的最类似Rust的方式.这些宏可以工作,甚至可以通过一些不安全的块来制作通用,但它们都觉得非常不像Rust.

我会很感激任何输入并且没有任何打击,我认为这段代码远非好或不优.我现在只玩Rust几周了,追逐发布和文档,所以非常感谢帮助.

macro_rules! convert_u8vec_to_array {
    ($container:ident, $size:expr) => {{
    if $container.len() != $size {
            None
    } else {
        use std::mem;
        let mut arr : [_; $size] = unsafe { mem::uninitialized() };
        for element in $container.into_iter().enumerate() {
            let old_val = mem::replace(&mut arr[element.0],element.1);
            unsafe { mem::forget(old_val) };
        }
        Some(arr)
        }
    }};
}

fn array_to_vec(arr: &[u8]) -> Vec<u8> {
     let mut vector = Vec::new();
     for i in arr.iter() {
         vector.push(*i);
     }
     vector
}

fn vector_as_u8_4_array(vector: Vec<u8>) -> [u8;4] {
    let mut arr = …
Run Code Online (Sandbox Code Playgroud)

rust

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

Rust迭代器并期待(peek/multipeek)

我试图在Rust中使用带有迭代器的模式并在某处掉落,显然很简单.

我想迭代一个容器并找到一个带有谓词[A](简单)的元素,但是然后使用另一个谓词向前看并得到该值[B]并使用[B]以某种方式改变[A].在这种情况下,[A]是可变的,[B]可以是不可变的; 这对我没有任何影响,只对借阅检查员(正确).

通过一个简单的场景来理解这一点很有帮助,所以我添加了一个小片段让民众看到问题/尝试的目标.我玩过itertools并进入for/while循环,尽管我希望尽可能保持惯用.

愚蠢的示例场景

查找偶数,找到可被3整除的下一个数字并添加到初始数字.

#[allow(unused)]
fn is_div_3(num: &u8) -> bool {
    num % 3 == 0
}

fn main() {
    let mut data: Vec<u8> = (0..100).collect();

    let count = data.iter_mut()
        .map(|x| {
            if *x % 2 == 0 {
                // loop through numbers forward to next is_div_3,
                // then x = x + that number
            }
            true
        })
        .count();

    println!("data {:?}, count was {} ", data, count);
}
Run Code Online (Sandbox Code Playgroud)

操场

iteration rust

10
推荐指数
2
解决办法
1358
查看次数

在线程上借用对象和所有权

对不起新手问题.这里的错误是

<anon>:30:5: 30:17 error: cannot borrow immutable borrowed content as mutable
<anon>:30     routing_node.put(3);
              ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多东西来解决这个问题,但我知道这是一个简单的错误.任何帮助非常感谢.

use std::thread;
use std::thread::spawn;
use std::sync::Arc;

struct RoutingNode {
  data: u16
}

impl RoutingNode {
  pub fn new() -> RoutingNode {
      RoutingNode { data: 0 }
}

pub fn run(&self) {
    println!("data : {}", self.data);
}

pub fn put(&mut self, increase: u16) {
    self.data += increase;
}
}

fn main() {
  let mut routing_node = Arc::new(RoutingNode::new());
  let mut my_node = routing_node.clone();
{
    spawn(move || {my_node.run(); …
Run Code Online (Sandbox Code Playgroud)

rust

4
推荐指数
1
解决办法
556
查看次数

标签 统计

rust ×3

c++ ×1

c++11 ×1

iteration ×1

stdasync ×1