gpt4 book ai didi

c++ - 指向另一个函数的函数参数

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:00 25 4
gpt4 key购买 nike

这是一个更具体的问题,基于我之前提出的问题...

如果我有一个函数接受两个参数(一个必需,一个可选):

  1. STL 容器,例如 vector
  2. 一个“可选的”比较函数,用作关系重载并返回 vector 中的最大值,无论是什么...

代码:

template <typename Type>
Type FindMax (std::vector<Type> &myVec, int (*cmp)(Type one, Type two) = CallBack)
/.../

“int (*cmp)(Type one...)”到底对编译器说了什么?我想说的是,这是比较两个 Type 类型时使用的函数...即使用关系运算符 <、>、= 等时。如果用户未提供函数,则使用默认值,否则使用用户提供什么...

(*cmp)(类型一,类型二)到底说了什么?这是一个指向带有两个参数类型一和类型二的函数的指针? * 后面的内容有什么意义吗,即我可以写 (*titsmagee)(Type one, Type two) 吗?我假设命名约定是为了帮助 future 的读者?

为了与“结构”一起使用,是否需要将任何特定于要进行的潜在比较的内容存储在所述结构中?

谢谢!

最佳答案

int (*cmp)(Type one, Type two)

名为cmp 的参数是一个指向返回int 的函数的指针,该函数接受两个Type 类型的参数。

struct Foo
{
int x;
};
int compare(Foo x, Foo y)
{
return (x.x == y.x) ? 0 : (x.x > y.x ? 1 : -1);
}

std::vector<Foo> vec;

FindMax<Foo>(vec, &compare);

你需要cmp,这样你就可以在FindMax中调用比较函数:

template <typename Type>
Type FindMax (std::vector<Type> &myVec, int (*cmp)(Type one, Type two) = CallBack)
{
//whatever loop
max = cmp(myVec[i],myVec[j]) >= 0 ? myVec[i] : myVec[j];
}

编辑 分解返回:

return (x.x == y.x) ? 0 : (x.x > y.x ? 1 : -1);

?: 是三元条件运算符。

condition ? expression1 : expression2

返回(笼统地说)如果 condition 为真,则返回 expression1,否则返回 expression2。

那么这意味着:

if (x.x == y.x) 
return 0;
else
if (x.x > y.x)
return 1;
else
return -1;

这是您希望比较函数执行的操作。相等时返回 0,如果第一个元素大于第二个元素则返回 1,反之则返回 -1

编辑 2

struct Foo
{
int x;
};
//Foo has a member x.
Foo f;
//Create a Foo object called f.
f.x;
//Access the member x of the object

关于c++ - 指向另一个函数的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667201/

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