gpt4 book ai didi

c++ - vector 中的模板推导失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:53 24 4
gpt4 key购买 nike

我尝试制作一个通用的叉积函数:

template<class ContainerType1, class ContainerType2, typename ReturnType>
std::vector<ReturnType> cross_product(const ContainerType1& a, const ContainerType2& b)
{
assert((a.size()==3)&&(b.size==3));

return {a[1]*b[2]-a[2]-b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0]};
}

这条线

std::vector<double> A = cross_product(p_r2,p_r1);

给我错误:

error : couldn't deduce template parameter ‘ReturnType’

有没有办法保持通用性,并避免将 ReturnType 声明为例如 double ?

最佳答案

考虑使用 Class template argument deduction , 和写作:

template<class ContainerType1, class ContainerType2>
auto cross_product(const ContainerType1& a, const ContainerType2& b)
{
assert((a.size()==3)&&(b.size()==3));

return std::vector{a[1]*b[2]-a[2]-b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0]};
}

或者,在 C++ 17 之前,使用 decltype 获取值的类型:

template<class ContainerType1, class ContainerType2>
auto cross_product(const ContainerType1& a, const ContainerType2& b)
-> std::vector<decltype(a[0] * b[0] - a[0] - b[0])>
{
assert((a.size()==3)&&(b.size()==3));

return {a[1]*b[2]-a[2]-b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0]};
}

关于c++ - vector 中的模板推导失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53758240/

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