gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:21:34 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com