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