use*_*501 7 c++ c++11 enum-class
可以这样做吗?
enum A
{
enum B
{
SOMETHING1,
SOMETHING2
};
enum C
{
SOMETHING3,
SOMETHING4
};
};
Run Code Online (Sandbox Code Playgroud)
如果没有,是否有替代解决方案?
这个问题的目的:想要/需要能够做这样的事情:
enum class ElementaryParticleTypes
{
enum class MATTER
{
enum class MESONS
{
PI
};
enum class BARYONS
{
PROTON,
NEUTRON
};
enum class LEPTONS
{
ELECTRON
};
};
enum class ANTI_MATTER
{
enum class ANTI_MESONS
{
ANTI_PI
};
enum class ANTI_BARYONS
{
ANTI_PROTON
ANTI_NEUTRON
};
enum class ANTI_LEPTONS
{
POSITRON
};
};
};
Run Code Online (Sandbox Code Playgroud)
希望使用强类型功能.
And*_*owl 10
不,他们不能以这种方式嵌套.实际上,任何编译器都会拒绝它.
如果没有,是否有替代解决方案?
这主要取决于你想要达到的目标(解决什么问题?).如果你的目标是能够编写类似的东西A::B::SOMETHING1,你可以在命名空间中定义它们,这样:
namespace A
{
enum B
{
SOMETHING1,
SOMETHING2
};
enum C
{
SOMETHING3,
SOMETHING4
};
}
Run Code Online (Sandbox Code Playgroud)
use*_*501 -7
(仍然)没有办法做到这一点(2023 年)。最接近的方法是在一个枚举内定义一长列表中的所有内容。
enum class A{
PARTICLE_MATTER_BARYON_PROTON,
PARTICLE_MATTER_BARYON_NEUTRON,
PARTICLE_ANTIMATTER_BARYON_PROTON // etc
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10413 次 |
| 最近记录: |