私は次の構造体を持っています:
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
最後にこれに対する答えを得ました。解決:
構造体 avl_tree で:
typedef int (*compare)(T, T);
static compare comp;
メインの上:
template <typename T> int (*avl_tree<T>::comp)(T, T);//Initialise the pointer
主に:
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