标题可能看起来有点混乱,所以这里有一个更彻底的解释:
我有一个模板类,它有一个向量作为成员变量。模板参数是一个结构(或类),它将具有一个特定的变量。这个向量的类型应该从模板参数(从这个某个变量)派生出来。棘手的部分是它应该从模板参数的成员变量派生。
#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) 简而言之:为什么我可以使用
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)
并不是说它不起作用,但我不明白这里的原因。
我经常遇到这个问题。每次我将向量写入文件或将其转换为字符串时,我都想知道是否有更好的方法来执行此操作。我的(相当丑陋的)代码:
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”。
我想知道是否有更简单的方法可以做到这一点。