看到一段代码,不明白

时间:2022-02-15 02:48:10
template<class T>
struct OctreeNode
{
T data; 
T xmin,xmax; 
T ymin,ymax;
T zmin,zmax;
OctreeNode <T> *top_left_front,*top_left_back; 
OctreeNode <T> *top_right_front,*top_right_back;
OctreeNode <T> *bottom_left_front,*bottom_left_back;
OctreeNode <T> *bottom_right_front,*bottom_right_back;
OctreeNode //节点类
(T nodeValue = T(),
T xminValue = T(),T xmaxValue = T(),
T yminValue = T(),T ymaxValue = T(),
T zminValue = T(),T zmaxValue = T(),
OctreeNode<T>* top_left_front_Node = NULL,
OctreeNode<T>* top_left_back_Node = NULL,
OctreeNode<T>* top_right_front_Node = NULL,
OctreeNode<T>* top_right_back_Node = NULL,
OctreeNode<T>* bottom_left_front_Node = NULL,
OctreeNode<T>* bottom_left_back_Node = NULL,
OctreeNode<T>* bottom_right_front_Node = NULL,
OctreeNode<T>* bottom_right_back_Node = NULL )
:data(nodeValue),
xmin(xminValue),xmax(xmaxValue),
ymin(yminValue),ymax(ymaxValue),
zmin(zminValue),zmax(zmaxValue),
top_left_front(top_left_front_Node),
top_left_back(top_left_back_Node),
top_right_front(top_right_front_Node),
top_right_back(top_right_back_Node),
bottom_left_front(bottom_left_front_Node),
bottom_left_back(bottom_left_back_Node),
bottom_right_front(bottom_right_front_Node),
bottom_right_back(bottom_right_back_Node){}
};

模板+struct可以么?
还有T nodeValue = T()这样写什么意思?

7 个解决方案

#1


struct中如果有函数成员,编译器会自动作为class处理
T nodeValue = T()表示调用构造函数T()生成T类型变量nodeValue

#2


那模板结构中可以有OctreeNode(){};构造函数么?

#3


引用 1 楼 hylaking 的回复:
struct中如果有函数成员,编译器会自动作为class处理 
T nodeValue = T()表示调用构造函数T()生成T类型变量nodeValue 

根据你的说法
data(nodeValue), 
xmin(xminValue),xmax(xmaxValue), 
ymin(yminValue),ymax(ymaxValue), 
zmin(zminValue),zmax(zmaxValue), 
这些就是赋值了吧?

#4


T nodeValue = T()
是构造函数的一个参数,它包含一个默认值 = T()。

#5


不能有OctreeNode(){};函数,因为上面的定义中已包含带默认参数的构造函数(会参数歧义)。

#6


引用 1 楼 hylaking 的回复:
struct中如果有函数成员,编译器会自动作为class处理 
T nodeValue = T()表示调用构造函数T()生成T类型变量nodeValue 

同意。

#7


又是一段变态的代码

#1


struct中如果有函数成员,编译器会自动作为class处理
T nodeValue = T()表示调用构造函数T()生成T类型变量nodeValue

#2


那模板结构中可以有OctreeNode(){};构造函数么?

#3


引用 1 楼 hylaking 的回复:
struct中如果有函数成员,编译器会自动作为class处理 
T nodeValue = T()表示调用构造函数T()生成T类型变量nodeValue 

根据你的说法
data(nodeValue), 
xmin(xminValue),xmax(xmaxValue), 
ymin(yminValue),ymax(ymaxValue), 
zmin(zminValue),zmax(zmaxValue), 
这些就是赋值了吧?

#4


T nodeValue = T()
是构造函数的一个参数,它包含一个默认值 = T()。

#5


不能有OctreeNode(){};函数,因为上面的定义中已包含带默认参数的构造函数(会参数歧义)。

#6


引用 1 楼 hylaking 的回复:
struct中如果有函数成员,编译器会自动作为class处理 
T nodeValue = T()表示调用构造函数T()生成T类型变量nodeValue 

同意。

#7


又是一段变态的代码