小编Kea*_*uan的帖子

<type_traits> 头文件中的一些实现在哪里?

我在 <type_traits> 头文件中看到了一些实现,但是有一些我找不到的实现,像这样:

// STRUCT TEMPLATE is_class
template <class _Ty>
struct is_class : bool_constant<__is_class(_Ty)> {}; // determine whether _Ty is a class

template <class _Ty>
_INLINE_VAR constexpr bool is_class_v = __is_class(_Ty);
Run Code Online (Sandbox Code Playgroud)

我想知道 __is_class 的实现。有人知道实现在哪里吗?我使用名为 Visual Studio 2019 的 IDE。

c++

3
推荐指数
1
解决办法
41
查看次数

Why can’t I use a thread handle which is stored in a struct?

I want to implement an executor. I want to store the thread handle in a struct, so I can join it later, waiting for the threads to stop gracefully.

But I get an error when I try to call the join() method. I would like to know the reason and how to fix that.

struct Executor{
    tx:Sender<Box<dyn Send + Fn()>>,
    t:JoinHandle<()>,
}
impl Executor {
    fn new()->Self{
        let (tx, rx) = mpsc::channel::<Box<dyn Send + Fn()>>();
        let handle = thread::spawn(move || …
Run Code Online (Sandbox Code Playgroud)

rust

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

有没有一种快速的方法来获取二进制值中等于 1 的位的索引?

我想以二进制格式获取等于 1 的索引,现在我使用如下代码:

inline static uint8_t the_index(uint32_t val){
  return uint8_t(log(val & ((~val) + 1))/log(2));
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否还有其他方法可以达到相同的目标?有没有可能用位运算来解决这个问题呢?

我这样做是为了迭代一个值并构建一些取决于迭代位置的操作,伪代码如下所示:

 while (temp) {
            auto cur_index = the_index(temp);
            auto window = ((1 << i) - 1) << cur_index;
            if (((temp & window) ^ window) == 0) {
              //....do something
            }
            temp &= temp - 1;
        }
Run Code Online (Sandbox Code Playgroud)

c++ algorithm bit-manipulation bitwise-operators

3
推荐指数
1
解决办法
2487
查看次数

如何通过 Rust 中的 mpsc 通道发送带有捕获的闭包?

我想实现一个执行器,可以执行队列中的打包任务。首先,我希望使用闭包将不同类型的函数变成一种类型,并将闭包发送到通道中,然后在另一个线程中接收并执行它。代码如下:

use std::thread;
use std::sync::mpsc;
macro_rules! packed_task {    
    ($f:ident, $($arg:expr),*) => {move ||{
        $f($($arg,)*)
    }};
}
macro_rules! packed_method_task {
    ($f:ident,$ins:ident, $($arg:expr),*) => {move ||{
        $ins.$f($($arg,)*);
    }};
    ($f:ident,$ins:ident $($arg:expr),*) => {move ||{
         $ins.$f($($arg,)*);
    }};
}
#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    fn area1(&self, w:u32, h:u32) -> u32 {
        w*h
    }
}
fn invoke_1(a:i32, b:i32, c:i32)->i32{
    let fc = |x,y,z| x+y+z + 1;
    return packed_task!(fc, a, b,c)(); …
Run Code Online (Sandbox Code Playgroud)

closures channel rust

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