当前位置: 首页 > 知识库问答 >
问题:

为特征向量和std::向量编写模板函数

郭易安
2023-03-14

我希望编写一个模板函数来接受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;
}

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

共有3个答案

史淇
2023-03-14

诀窍不是编写几个函数(如您所发现的),而是应用标量函数valdo_something(T

do_something(var);
std::transform(v.begin(), v.end(), v.begin(), do_something);
matrix.unaryExpr(do_something);

陶成济
2023-03-14

Eigen::VectorX*仅继承自Eigen::EigenBase

template<typename Scalar>
void do_something(Eigen::Matrix<Scalar, Eigen::Dynamic, 1> &evec) { /*...*/}

狄令
2023-03-14

您可以使用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()函数对特征值排序 主成份分析以及许多