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

时间:2013-09-03 19:44:17

标签: c++ templates runtime member

我有以下结构:

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

3 个答案:

答案 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 questionthis 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