在模板化结构的所有实例中将成员设置为相同的值
Set member to same value in all instances of templated structure
我有以下结构:
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';
请参阅此处
相关文章:
- 嵌套在类中时无法设置成员数据
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 聚合初始化,将成员指针设置为同一结构成员
- 在类 (C++) 之外设置 const int 成员变量
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 自定义 QML QQuick彩绘项目成员锚点未在 qml 中设置为父级
- 如何在C++中将 cin 设置为类的成员函数?
- 将 AlphaMode 成员设置为 DXGI_SWAP_CHAIN_DESC1 会使 CreateSwapChainFo
- 在VS2017中,我们如何在项目成员之间共享编译设置
- 如何为类中可能无法计算的成员设置值
- 如何在没有setter的情况下设置类内部类的成员变量?
- 在运行时为随机分布类成员设置最小和最大边界?
- 是否可以在C++中使用初始化列表设置数组的特定成员?
- 设置成员 GlobalCEFApp->OnWebKit使用函数地址初始化 C++生成器
- 一个线程设置成员,而另一个循环上方 - 是此螺纹 - 不安全
- 有没有办法使用显式实例化按类型设置成员变量
- 为什么不能为类实例设置成员值?
- 构造函数不设置成员变量
- 我可以在构造函数调用之前设置成员变量吗?
- 如何仅设置成员(如果存在)