代码之家  ›  专栏  ›  技术社区  ›  R zu

返回包含ArrayRapper的表达式

  •  0
  • R zu  · 技术社区  · 5 年前

    我正在编写C++/Python混合语言。粘合这两部分的库支持特征矩阵/数组,但不支持张量。

    这样做安全吗?

    #include <iostream>
    #include <Eigen/Eigen>
    using namespace Eigen;
    
    template<typename D>
    auto f(DenseBase<D>& x, const Index i) {
        // x2 is destroyed when the program leaves 
        // this function.
        ArrayWrapper<D> x2(x.derived());  
        return x2.middleCols(i * 3, 3);
    }
    
    int main() {
        ArrayXf a(3, 9);
        a = 0;
        f(x, 1) = 1;
        std::cout << x << "\n";
    }
    

    template<typename D>
    auto f(DenseBase<D>& x, const Index i) {
        return x.derived().array().middleCols(i * 3, 3);
    }
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   ggael    5 年前

    两个版本都是相同的,而且都是安全的。这是因为代理表达式 ArrayWrapper Block middleCols() 按值嵌套,而不是按引用嵌套。