在模板化结构的所有实例中将成员设置为相同的值

Set member to same value in all instances of templated structure

本文关键字:设置 成员 实例 结构      更新时间:2023-10-16

我有以下结构:

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

声明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;

有关初始化模板类的静态成员的更多信息,请参阅此SO问题和此外部网站。

我很难理解你的问题,但我在想你为什么不简单地做这样的事情:

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的转换方法。

喜欢以下

avl_tree<int> *tree =new avl_tree<int>;
tree->comp =compare; //Your function
std::cout << tree->comp(tree->data, 9) << 'n';

请参阅此处