c++ - 为 Eigen 和 std::vectors 编写模板函数

标签 c++ eigen

我希望编写一个模板化函数来接受 Eigen::VectorX* (float/int/double) 和 std::vector<*> (float/int/double) 和“简单的”int/float/double。

如何声明模板?以下不起作用。

// header.h

//std::vector function
template <typename T, typename A>
void do_something(std::vector<T, A> &stdvec)
{
    //do stuff with std::vector<T>
    //e.g. std::fill(stdvec.begin(),stdvec.end(),0);
}

//Eigen vector function
template <typename Derived>
void do_something(Eigen::EigenBase<Derived> &evec)
{
    //do stuff with Eigen::VectorX
    //e.g. evec.setZero()
}

//single value function
template <typename T>
void do_something(T &var)
{
    //do stuff with int/float/double
    //e.g. var = 0;
}

基本原理是不要编写所有不同组合的单个函数。

最佳答案

您可以使用 std::enable_if 只为算术类型启用完全泛型版本:

template <typename T>
typename std::enable_if<std::is_arithmetic<T>::value,void>::type
do_something(T &var) { ... }

关于c++ - 为 Eigen 和 std::vectors 编写模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028707/

相关文章:

c++ - Objective-C 如何使用 vector 对?

c++ - 如何使用 quazip 压缩目录/文件夹?

c++ - 以下代码中嵌入的 "new"是否会导致内存泄漏?

c++ - 特征稀疏求解器结果错误

c++ - 将 Matlab eig(A,B)(广义特征值/特征向量)重写为 C/C++

c++ - 在 C++ 中解决稀疏线性系统的最佳方法 - GPU 可能吗?

c++ - 如何将 VS2008 C++ 项目链接为 DLL 而不是 LIB?

C++ void 值没有被忽略,因为它应该是(不试图分配一个 void 值......)

c++ - 将动态特征向量的 vector 转换为字节

c++ - 使用 Eigen 与双指针的矩阵表示