gpt4 book ai didi

c++ - 正确使用模板函数

转载 作者:太空狗 更新时间:2023-10-29 23:00:15 25 4
gpt4 key购买 nike

我正在尝试学习某个项目的设计原理,我正在尝试运行作为示例给出的代码。这里我尝试递归计算n维两点之间的距离,我可以通过许多其他方式实现这段代码的目标,但我只是想具体了解这种情况。(我想学习语法)

这是我的代码

 template <typename P1, typename P2, int D>
struct pythagoras
{
typedef typename select_most_precise
<
typename coordinate_type<P1>::type,
typename coordinate_type<P2>::type
>::type computation_type;

static double apply(P1 & a, P2 & b)
{
double d = get<D-1>(a) - get<D-1>(b);
return d * d + pythagoras<P1, P2, D-1>::apply(a, b);
}
};

int main ()
{
tuple<int,int> mytuple (10,20),two (10,20);
int f=2;
double h=pythagoras<tuple<int,int>,tuple<int,int>,int>::apply(mytuple,two,f);
cout << h;
}

问题:

1- 我遇到了错误需要一个“int”类型的常量,得到了“int”,我该如何解决?

2- 错误的实际含义是什么?

3- 代码“Typedef”到“computation_type”用于获取变量的类型,这是如何工作的?

最佳答案

类模板的最后一个参数不是类型!这是一个值(value)。也就是说,您传递了 int,其中预期类型为 2int 常量。你会像这样使用类模板

double h=pythagoras<tuple<int,int>, tuple<int,int>, 2>::apply(mytuple, two);

据说,实际上有一个功能只是实际使用这种类型作为辅助工具。至少,我希望有类似的东西

template <typename T1, typename T2>
double compute_pythagoras(T1 const& t1, T2 const& t2) {
return pythagoras<T1, T2, std::tuple_size<T1>::value>::apply(t1, t2);
}

我没有看到正在使用的 computation_type。似乎意图是根据元组(或类似元组的实体)的元素类型确定适合计算的类型。无论它打算做什么,实际的选择都在 select_most_precise

的定义中

关于c++ - 正确使用模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34222241/

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