C++ C++;未命名类型化结构成员
首先,我将从什么起作用开始: 结构A { INTA,b; }; 结构 { A_;//成员可以在其他位置定义。 结构B { int c,d; };//成员可以在本地定义。 B B_; 结构C { int e,f; }C_;//成员可以在同一行上实例化。。。 C C2_;/…并且该定义仍然有效。 结构 { int g,h; }D_;//可以在不使用类型名的情况下定义成员并命名。 //(而且很明显,事后也没有办法提出实例) 结构 { int i,j; };//可以不使用类型名定义成员,也可以不命名成员。 //(而且很明显,事后也没有办法提出实例) }; 可以在代码中直接访问未命名结构(和未类型化结构)的成员(这是非标准扩展):C++ C++;未命名类型化结构成员,c++,C++,首先,我将从什么起作用开始: 结构A { INTA,b; }; 结构 { A_;//成员可以在其他位置定义。 结构B { int c,d; };//成员可以在本地定义。 B B_; 结构C { int e,f; }C_;//成员可以在同一行上实例化。。。 C C2_;/…并且该定义仍然有效。 结构 { int g,h; }D_;//可以在不使用类型名的情况下定义成员并命名。 //(而且很明显,事后也没有办法提出实例) 结构 { int i,j; };//可以不使用类型名定义成员,也可以不命名成员
intmain()
{
S S;
s、 一,;
s、 j;
}
有没有办法创建一个类似的场景,但是使用一个未命名但已键入的成员
struct X
{
结构
{
int k,l;
};
};
int main()
{
X;
x、 k;
x、 l;
}
显然,上面的代码是不正确的,因为
结构Y{…}
被解释为本地结构定义。现在我想了想,我可以看出我想要的是不可能的
如果这样的事情是允许的,那么它会在
struct X
{
int k,l;
};
结构
{
十、 //未命名(X1)
十、 //未命名(X2)
};
未遂事件解决方案包括:
- 继承权
- 硬编码
struct Y
{
联盟
{
X_ux;
结构
{
int k,l;
};
};
};
这只是一个丑陋的,不“健壮”。在这一点上,实际上最好一起放弃这一计划
- 私人继承与使用
struct Y:private X
{
使用X::k;
使用X::l;
};
这个解决方案可以防止不必要的上传,但它基本上和硬编码的一样混乱(尽管至少它不允许使用不存在的成员)。可能使用继承<代码>结构X:public Y{}在上一个示例中,
X
实际上没有名为k
或l
的成员。它也没有类型为Y
的数据成员。它根本没有任何名称的数据成员。@WeiHsieh我正要写一条愤怒的评论,如“显然不是因为多重继承”,然后意识到“显然是因为多重继承”。。。谢谢@IgorTandetnik是的,事实上,如果你仔细观察,你会发现我提到了这一点。非标准并不意味着错误。你可能真的不在乎。我只是想让这个网站的其他读者知道。