[英]c++ variadic templates fold expression
我正在读一本有关模板的书。有一段示例代码使用折叠表达式使用运算符-> *遍历二叉树中的路径:
// define binary tree structure and traverse helpers:
struct Node {
int value;
Node* left;
Node* right;
Node(int i=0) : value(i), left(nullptr), right(nullptr) {
}
//...
};
auto left = &Node::left;
auto right = &Node::right;
// traverse tree, using fold expression:
template<typename T, typename... TP>
Node* traverse (T np, TP... paths) {
return (np ->* ... ->* paths); // np ->* paths1 ->* paths2 ...
}
int main()
{
// init binary tree structure:
Node* root = new Node{0};
root->left = new Node{1};
root->left->right = new Node{2};
//...
// traverse binary tree:
Node* node = traverse(root, left, right);
//...
}
我不太明白这条线
auto left = &Node::left;
auto right = &Node::right;
正如我以前认为::运算符应用于类只会引用其静态成员,也许在这种情况下我错了,而且我确实知道::是作用域解析运算符,无论如何它都可能引用Node的左边static,但是为什么可以使用&运算符获取其地址? 实际上,我在考虑的是这只是一个别名
using left = &Node::left; // can't compile
只有在
auto left = &Node::left;
汽车的结果是什么? 此表达式的显式类型?
注意:这里使用全局的left和right
Node* node = traverse(root, left, right);
这是main中的最后一行。
我试过运行它,所有方法都可以,但是我不太明白,它如何起作用?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.