如何在泛型模板中的辅助函数中将私有变量作为参数引用 我正在使用C++中的通用模板进行模块化编程(我们不使用OOP概念)。
我们在理解如何在辅助函数中引用模板中的单个变量(即结构本身)而不引用整个结构时遇到了一个问题 举个例子,因为听起来很奇怪,我们有:如何在泛型模板中的辅助函数中将私有变量作为参数引用 我正在使用C++中的通用模板进行模块化编程(我们不使用OOP概念)。,c++,c++11,C++,C++11,我们在理解如何在辅助函数中引用模板中的单个变量(即结构本身)而不引用整个结构时遇到了一个问题 举个例子,因为听起来很奇怪,我们有: template<typename T> struct tree { friend void addElement<T> (tree<T>& c, const T& e); struct Node { T element; // template element No
template<typename T>
struct tree {
friend void addElement<T> (tree<T>& c, const T& e);
struct Node {
T element; // template element
Nodo* left;
Nodo* right;
};
Node* root;
int size;
}
template<typename T>
void friend void addElement<T> (tree<T>& c, const T& e);
insert(c.root, e);
c.size++;
}
// auxiliary function
template<typename T>
void insert(tree<T>root node, const T& e) {
// how to refer to taking a Node* as an argument? we want
// to modify the node structure of the tree in a recursive way,
// so we will need to pass Node->left or Node->right as arguments
// code
}
模板
结构树{
朋友无效附加元素(树和c、常数T和e);
结构节点{
T元素;//模板元素
野多*左;
野多*对;
};
节点*根;
整数大小;
}
模板
无效朋友无效附加元素(树和c、常数T和e);
插入(c.根,e);
c、 大小++;
}
//辅助功能
模板
无效插入(treeroot节点,常量T&e){
//如何引用节点*作为参数?我们想要
//要以递归方式修改树的节点结构,
//所以我们需要将Node->left或Node->right作为参数传递
//代码
}
我们已经尝试了多种方法,但迄今为止没有一种有效。这怎么可能呢
谢谢 语法应该是tree::Node*Node
,由于它是一个依赖名称,我们必须使用额外的typename
:typename tree::Node*Node
:
template<typename T>
void insert(typename tree<T>::Node* node, const T& e) {
// ...
}
template<typename T>
void addElement(tree<T>& c, const T& e)
{
insert(c.root, e);
c.size++;
}
模板
void insert(类型名树::节点*节点,常量T&e){
// ...
}
模板
无效附加元素(树和c、常数T和e)
{
插入(c.根,e);
c、 大小++;
}
不过,您可能希望通过引用传递该指针。您的意思是
tree::Node*Node
?您可以使用backquote`将其格式化为代码。星号*表示斜体(简单*)或粗体(双**),反斜杠\表示转义。@churill谢谢!事实上,这就是我想要指出的方式(我相信),我已经在使用它来创建内部的新变量……但是如果我这样说,g++会抱怨说:错误:变量或字段“insert”声明为void 125 |模板void insert(tree::Node*Node,const T&e);你有很多“打字错误”:缺少代码>,额外的代码>,无效朋友无效
。。。