c++中的一个BST回调函数和函数指针问题
Callback function and function pointer trouble in C++ for a BST
我必须创建一个模板化的二叉搜索树,它可以处理任何数据类型,包括像对象这样的抽象数据类型。由于不知道对象可能具有什么类型的数据以及要比较哪些数据,因此客户端必须创建一个比较函数和一个打印函数(因为还不确定必须打印哪些数据)。
我编辑了一些C代码,我被指导并试图模板,但我不知道如何配置客户端显示功能。我怀疑BinarySearchTree类的变量"tree_node"必须传入,但我不确定如何做到这一点。
对于这个程序,我正在创建一个整数二叉搜索树并从文件中读取数据。任何对代码或问题的帮助将非常感激:)
Main.cpp
#include "BinarySearchTreeTemplated.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
/*Comparison function*/
int cmp_fn(void *data1, void *data2)
{
if (*((int*)data1) > *((int*)data2))
return 1;
else if (*((int*)data1) < *((int*)data2))
return -1;
else
return 0;
}
static void displayNode() //<--------NEED HELP HERE
{
if (node)
cout << " " << *((int)node->data)
}
int main()
{
ifstream infile("rinput.txt");
BinarySearchTree<int> tree;
while (true) {
int tmp1;
infile >> tmp1;
if (infile.eof()) break;
tree.insertRoot(tmp1);
}
return 0;
}
BinarySearchTree.h(有点大,这里无法格式化)
http://pastebin.com/4kSVrPhm我认为服务器端应该提供比较和打印功能。这也可以作为模板来完成。
template <class T>
int cmp_fct( const T& rhs, const T& lhs ) {
if( rhs < lhs) return -1;
else if (rhs > lhs) return 1;
return 0;
}
displayNode的过程相同。
现在客户端必须提供一些操作符:
struct TestObject {
int i;
friend bool operator<( const TestObject& rhs, const TestObject& lhs ) {
return rhs.i < lhs.i;
}
friend bool operator>( const TestObject& rhs, const TestObject& lhs ) {
return lhs < rhs;
}
// and stream operators
friend std::ostream& operator<<( std::ostream& output, const TestObject & ob)
{
output << ob.i;
return output;
}
};
此外,我会考虑为您的BinarySearchTree
使用c++方法,即使用智能指针而不是原始指针。
您的BinarySearchTree
创建对象但从不删除它们。
避免使用空指针,使用接口(例如INode
),然后,客户端必须从接口派生…
使用构造函数初始化列表,否则,对象将由默认构造函数创建,然后在构造函数中重新赋值。
相关文章:
- 以特征类型作为参数的泛型函数回调
- C# DllImport 调用非托管C++函数回调
- 为什么模板参数推导失败,std::函数回调的可变参数模板参数?
- std::包含 std::函数回调的多个包装器的向量不起作用
- 如何设置对类的私有函数的函数回调?
- 如何使用 c++11 函数回调声明多个模板参数
- sqlite3 更改函数回调参数 void* not用于 int* C++
- 如何知道 sqlite 中的函数"回调"是否返回了一些东西?
- Windows表单如何使用其他函数回调图表信息
- 如何在 c++ 结构中的 void* 变量中调用存储函数(回调)
- 将成员函数作为标准函数回调
- C++ 使用成员函数回调实现按钮
- std::函数回调,参数采用观察者模式(寄存器主题上的占位符)
- 使用可变参数模板从 Lua 函数回调 (C api) 中提取参数
- 在C++中使用派生类的静态方法作为函数回调
- 将libuv与函数结构一起使用,而不是函数回调
- 如何将函数回调传递给类成员
- c++类成员函数回调
- C++函数回调:无法从成员函数转换为函数签名
- 如何编写一个通用函数回调测试类