C ++模板函数,可以采用Eigen :: vector或std :: vector

时间:2018-05-06 06:46:54

标签: c++ templates vector eigen

我在我的程序中使用了std :: vector,现在我意识到Eigen :: VectorXd将大大减少我的任务。所以我转向使用Eigen。但是我不想完全改变程序,因此我想到使用模板来处理以前定义的一些函数。

我是C ++的新手,模板编程有点令人困惑我无法超越下面的程序,这是错误的。

using namespace Eigen;
template<class T>
T getvec(T& var)
{
    T res;
    res[0] = var[0]*3;
    res[1]=var[1]*3;
     res[2]=var[2]*3;
    return res;
}

int main(){


    std::vector<double> a(3,1);
    Eigen::VectorXi b(3);
    b.setOnes();

     auto x= getvec(a);
    auto y=getvec(b);
    }

是否可以编写一个模板函数,可以将std :: vector或Eigen :: VectorXd作为参数?

我需要一个以下功能,可以同时使用这两种类型。

std::vector<double> getTransform(std::vector<double>& vec)
{
     std::vector<double> res;
     res[0] = vec[0]*3.14;
     ...........
     ...........
     return  res;
}

1 个答案:

答案 0 :(得分:3)

试试这个:

template <typename T>
T  getTransform(const T& vec)
{
    T res;
    res.resize(vec.size());
    for (size_t i = 0; i < size_t(vec.size()); ++i)
    {
        res[i] = vec[i]*3.14;
    }
    return  res;
}