将指针重新解释为ublas :: vector

时间:2017-09-13 12:41:46

标签: c++ pointers vector fortran ublas

我试图编写一个从Fortran调用的C ++函数。因此,Fortran通过引用C ++函数传递所有参数(向量)。为了省略数据的复制,我想创建一个数据结构,将Fortran引用解释为ublas :: vectors。到目前为止,我设法使用带有双精度的标准数组来实现这一点(参见struct中的变量声明):

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

template<unsigned int sizeVector>
struct DataContainer
{
    typedef boost::numeric::ublas::bounded_vector<double,sizeVector> Vector;

    // Variable declaration
    double (&var1)[sizeVector];
    double (&var2)[sizeVector];

    // Constructor
    DataContainer(double *var1_, double *var2_): var1(*static_cast<double(*)[sizeVector]>(static_cast<void*>(var1_))),
                                                 var2(*static_cast<double(*)[sizeVector]>(static_cast<void*>(var2_)))   {           
    }
}

// var1 and var2 are vectors (arrays) by reference as input
extern "C" void someFunction_(double *var1, double *var2)
{
    // Example --> DataContainer with vectors of sizeVector=6
    DataContainer<6> mydata(var1, var2);
}

不幸的是,我不知道如何将指针强制转换为ublas:vector(请参阅struct中的typedef)而不是双精度数组。这样的事情不起作用:

boost::numeric::ublas::bounded_vector<double,2> &var1 = *reinterpret_cast<boost::numeric::ublas::bounded_vector<double,2>*> (var1_);    

0 个答案:

没有答案