小编exo*_*tex的帖子

从模板成员类型派生模板化类的成员变量类型

标题可能看起来有点混乱,所以这里有一个更彻底的解释:

我有一个模板类,它有一个向量作为成员变量。模板参数是一个结构(或类),它将具有一个特定的变量。这个向量的类型应该从模板参数(从这个某个变量)派生出来。棘手的部分是它应该从模板参数的成员变量派生。

#include <vector>
#include <complex>
using namespace std;

struct thingA {
    double variable;
    //...
};

struct thingB {
    complex<double> variable;
    //...
};


template <class S>
class someClass {
    vector< " type of S::variable " > history; // If S=thingA, make it a double, if S=tingB make it a complex<double>
}

// Usage:
someClass<thingA> myInstanceA; // (this instance should now have a vector<double>)

someClass<thingB> myInstanceB; // (this instance should now have a vector<complex<double>>)
Run Code Online (Sandbox Code Playgroud)

c++ templates type-deduction

14
推荐指数
2
解决办法
561
查看次数

当惯用“core::array::from_fn()”初始化数组时,为什么我可以使用“rng.gen()”而不是“rng.gen_range()”?

简而言之:为什么我可以使用

let array: [[f64; width]; length] = core::array::from_fn(|_| rng.gen());
Run Code Online (Sandbox Code Playgroud)

但不是

let array: [[f64; width]; length] = core::array::from_fn(|_| rng.gen_range(0.0..1.0));
Run Code Online (Sandbox Code Playgroud)

并不是说它不起作用,但我不明白这里的原因。

random initialization rust

0
推荐指数
1
解决办法
39
查看次数

rust 将向量写入文件(或字符串)的惯用方式是什么?元素之间有制表符,末尾有换行符?

我经常遇到这个问题。每次我将向量写入文件或将其转换为字符串时,我都想知道是否有更好的方法来执行此操作。我的(相当丑陋的)代码:

fn main() {
    let vec = vec![1, 2, 3, 4, 5];

    let as_string = vec
        .iter()
        .take(vec.len() - 1)
        .fold("".to_string(), |acc, elem| {
            acc + &format!("{}\t", elem)
        })
        + &format!("{}\n", vec.last().unwrap());
    
    print!("{}", as_string);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我想迭代除最后一个元素之外的所有元素,并在每个向量元素后面附加一个“\t”,除非它是最后一个元素。在本例中,我想在元素后面附加一个“\n”。

我想知道是否有更简单的方法可以做到这一点。

iterator rust

0
推荐指数
1
解决办法
110
查看次数