gpt4 book ai didi

c++ - 什么是 void (*op)(T &) 和 void (*op)(T &, void *)?

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

我有一个关于链表和模板的作业,其中有带有奇怪参数的函数,这些参数是强制性的。我找不到关于它的在线文档,感谢任何提供的 Material 。

我曾尝试为 op 分配另一个地址,然后它编译得很好,但我无法调用它。

template <class T> struct L1Item {
T data;
L1Item<T> *pNext;
L1Item() : pNext(NULL) {}
L1Item(T &a) : data(a), pNext(NULL) {}
};

template <class T> class L1List {
L1Item<T> *_pHead; // The head pointer of linked list
size_t _size; // number of elements in this list
public:
void traverse(void (*op)(T &)) {
// TODO: Your code goes here
}
void traverse(void (*op)(T &, void *), void *pParam) {
// TODO: Your code goes here
// string *Req = static_cast<string *>(pParam);
// if (*Req == "find city's id") {
// op = this->_pHead;
// };
}
};

最佳答案

代码 void (*op)(T &)op 声明为一个指向函数的指针,它引用了一个类型 T 作为参数; void (*op)(T &, void *) 类似,但有一个类型为 void* 的额外参数。

与其尝试在您的(注释掉的)代码中分配一个指向对象的指针,op = this->_pHead; 您应该调用传递的函数。像这样的东西,例如:

void traverse(void (*op)(T &, void *), void *pParam) {
// TODO: Your code goes here
op(pHead->data, pParam); // First parameter is a T passed by reference
}

在您的代码的其他地方,当您实际调用 traverse 时,您需要将您(或某人)已经定义;例如:

template <class T> void myFunc(T& obj, void *pParam) {
string *Req = static_cast<string *>(pParam);
if (*Req == "find city's id") {
// do something with/to "obj"
}
}
//...
traverse(myFunc, pString);
// ...

随时要求进一步解释(但也请阅读您问题中给出的评论)!

关于c++ - 什么是 void (*op)(T &) 和 void (*op)(T &, void *)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58098371/

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