我有以下结构:
template <typename T> struct avl_tree {
T data;
int balance;
struct avl_tree <T> *Link[2];
int (*comp)(T, T);
};
我想要做的是在运行时将comp
函数指针指向有效函数,然后让struct avl_tree<T>
的所有实例都能够访问此函数。
int compare(int a, int b) {
return ( a - b );
}
这是否可以这样做,我可以做类似的事情:
avl_tree<int> tree(new avl_tree<int>);
tree = insert(tree, 9);
std::cout << tree->comp(tree->data, 9) << '\n';//Should print 0
终于得到了答案。 Solution:
struct avl_tree中的:
typedef int (*compare)(T, T);
static compare comp;
主要:
template <typename T> int (*avl_tree<T>::comp)(T, T);//Initialise the pointer
在main中:
avl_tree<int>::comp = compare;//Set the static member function pointer to the function to use
回答我之前的问题,以下是如何使用它:
avl_tree<int> tree(new avl_tree<int>);
tree = insert(tree, 9);
std::cout << avl_tree<int>::comp(tree->data, 9) << '\n';//Should print 0
简单:D
答案 0 :(得分:1)
我有一些难以理解你的问题,但我在想为什么你不做这样的事情:
template <typename T> struct avl_tree {
T data;
int balance;
struct avl_tree <T> *Link[2];
int comp(T x) { return compare(data, x);}
};
并确保您的T结构或类型具有转换为int的方法。
答案 1 :(得分:1)
声明comp
静态:
template <typename T> struct avl_tree {
T data;
int balance;
struct avl_tree <T> *Link[2];
static int (*comp)(T, T);
};
template <typename T> int(*::comp)(<T>, <T>);
您可以稍后使用以下命令为特定模板实例分配:
avl_tree<int>::comp = int_compare;
有关模板类静态成员初始化的更多信息,请参阅this SO question和this outside site。
答案 2 :(得分:0)
请注意以下
avl_tree<int> *tree =new avl_tree<int>;
tree->comp =compare; //Your function
std::cout << tree->comp(tree->data, 9) << '\n';
请参阅here