可以采用 Eigen::vector 或 std::vector 的 C++ 模板函数
C++ template function which can take Eigen::vector or std::vector
我在我的程序中使用 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;
}
试试这个:
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;
}
我在我的程序中使用 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;
}
试试这个:
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;
}