小编zod*_*iac的帖子

使用Eigen标头的模板功能

我想编写一个函数来计算用Eigen定义的Vector的范数.最低工作示例:

#include <iostream>
#include <Eigen/Dense>

using namespace Eigen;


template<typename t>
t norm( Matrix<t,Dynamic,1> RR ){
    t result = ( t ) 0;
    for ( auto i = 0 ; i < RR.rows(); i++ )
            result += RR( i ) * RR( i );
    }

    return result;
}


int main(){
    Matrix<float , 3 , 1 > test;
    test << 1,2,3;

    std::cout << test << std::endl;
    std::cout << norm( test ) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果我编译此代码,我会收到以下错误:

chem:~/programs/cpp/charge_ana> g++ -std=c++11 test.cpp -o test
test.cpp: …
Run Code Online (Sandbox Code Playgroud)

c++ templates eigen c++11

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

编写具有适用于 Vec 和数组 [] 的特征的 Rust 函数

我想在 Rust 中实现一个函数,计算数组或 Vec 的范数

对于 Vec<f64> 我会将函数写为

pub fn vector_norm( vec_a : &Vec<f64> ) -> f64 { 
                                             
    let mut norm = 0 as f64;                     
    for i in 0..vec_a.len(){                     
        norm  +=  vec_a[i] * vec_a[i];     
    }                                  
    norm.sqrt()
}                                             
Run Code Online (Sandbox Code Playgroud)

对于 &[f64] 我会做

    pub fn vector_norm( vec_a : &[f64] ) -> f64 { 
                                             
    let mut norm = 0 as f64;                     
    for i in 0..vec_a.len(){                     
        norm  +=  vec_a[i] * vec_a[i];     
    }                                  
    norm.sqrt()
}    
Run Code Online (Sandbox Code Playgroud)

但是有没有办法通过使用特征将两个版本组合成一个函数。我在想类似的事情

pub fn vector_norm<T:std::iter::ExactSizeIterator> 
                ( vec_a : &T ) -> f64 …
Run Code Online (Sandbox Code Playgroud)

traits rust iterator-traits

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

标签 统计

c++ ×1

c++11 ×1

eigen ×1

iterator-traits ×1

rust ×1

templates ×1

traits ×1