我希望编写一个模板函数来接受Eigen::vectrox*(float/int/double)和std::vector
如何声明模板?下面的方法不起作用。
// 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;
}
其基本原理是不编写单独的函数所有不同的组合。
诀窍不是编写几个函数(如您所发现的),而是应用标量函数(valdo_something(T
do_something(var);
std::transform(v.begin(), v.end(), v.begin(), do_something);
matrix.unaryExpr(do_something);
Eigen::VectorX*
仅继承自Eigen::EigenBase
template<typename Scalar>
void do_something(Eigen::Matrix<Scalar, Eigen::Dynamic, 1> &evec) { /*...*/}
您可以使用std::enable_if
仅为算术类型启用完全通用的版本:
template <typename T>
typename std::enable_if<std::is_arithmetic<T>::value,void>::type
do_something(T &var) { ... }
特征值
我有一个整数向量: 考虑到将始终为偶数。 我只是想把相邻的元素转换成一对,像这样: i、 两个相邻的元件连接成一对。 我可以使用什么STL算法轻松实现这一点?有没有可能通过一些标准算法来实现这一点? 当然,我可以很容易地编写一个旧的索引for循环来实现这一点。但我想知道,使用基于范围的for循环或任何其他STL算法(如等)最简单的解决方案是什么样的。
(这是我第二次尝试追踪我的确切问题。查看编辑历史记录) 我有一个简单的通用特性和两种不同的实现: 我现在想要一个包含两个实现元素的向量。正如我在这里学到的,我做: 但是编译器不同意: 一方面,这是有道理的。另一方面,我应该为写什么?我希望它是通用的,所以我不能简单地在那里放或。我可以做
我正在尝试创建一个特征对象的向量,但我得到了类型不匹配。我还尝试使用代替for循环,但遇到了同样的问题。这是我真实代码的最小版本,我意识到这个例子不需要使用特征对象,但我的真实代码需要,因为列表中除了之外还有其他类型,它们也实现了。如何使用正确的类型创建以便将其传递给?
使用C 14,我试图扩展此实现,以支持将在外部调用的ObserverCallback方法。 MyClass容器使用元组向量,其类型由可变模板指定。然后可以使用Access访问vector 我需要的是实现一个观察器,它应该向向量添加元素。由于元素的类型可以是元组中的任何类型,因此我也对其进行了模板化: 包装器类中似乎有错误: 作为参考,我还附上完整的源代码清单:
本文向大家介绍C++ Eigen库计算矩阵特征值及特征向量,包括了C++ Eigen库计算矩阵特征值及特征向量的使用技巧和注意事项,需要的朋友参考一下 本文主要讲解利用Eigen库计算矩阵的特征值及特征向量并与Matlab计算结果进行比较。 C++Eigen库代码 计算结果: 最大最小特征值及其索引位置 Matlab 代码 Matlab计算结果 使用sort()函数对特征值排序 主成份分析以及许多