简洁的计算 #define 方法
Concise way to calculate #define
我在生成的标头中有一组 #define,如下所示:
#define SFX_SOIL_DESTROY_1 2
#define SFX_SOIL_DESTROY_2 14
#define SFX_SOIL_PLACE_1 32
#define SFX_SOIL_PLACE_2 33
#define SFX_WOOD_DESTROY_1 5
我有一个方法,必须为材料类型和声音类型返回正确的定义。这是一个冗长而不简洁的解决方案:
int getSfx (MaterialType material, SoundType sound)
{
switch (material)
{
case SOIL:
{
switch (sound)
{
case DESTROY:
return rand()%2 ? SFX_SOIL_DESTROY_1 : SFX_SOIL_DESTROY_2;
case PLACE:
// And so on
有没有某种宏观黑客可以压缩这一点?任何帮助将不胜感激。
将其存储为数据查找要快得多,并且只需要处理一次(设置时)。因此,假设材料和声音或多或少是从零开始的顺序(否则进行查找翻译):
int soundLut [MAX_MATERIAL][MAX_SOUND][2] = {
{ // SOIL
{SFX_SOIL_DESTROY_1, SFX_SOIL_DESTROY_2}, // destroy
{SFX_SOIL_PLACE_1, SFX_SOIL_PLACE_2}, // Place
// etc - if only one effect, put 2 values the same
},
{ // WOOD
// and so on
}
};
然后:
int getSfx (MaterialType material, SoundType sound)
{
return soundLut [material][sound][rand()%2];
}
也许您可以使用地图来实现此目的,其解决方案与@Mike非常相似(但可能更安全)。
void initialize()
{
// This is your class member.
// std::map< std::pair< MaterialType, SoundType >, std::pair< int, int > > sfxs;
sfxs[ std::make_pair( SOIL, DESTROY ) ] = std::make_pair( SFX_SOIL_DESTROY_1, SFX_SOIL_DESTROY_2 );
sfxs[ std::make_pair( SOIL, PLACE ) ] = std::make_pair( SFX_SOIL_PLACE_1, SFX_SOIL_PLACE_2 );
// ...
}
int getSfx( MaterialType aMaterial, SoundType aSound )
{
const auto key = std::make_pair( aMaterial, aSound );
if ( sfxs.find( key ) != sfxs.end() )
{
return ( rand() % 2 ) ? ( sfxs[ key ].first ) : ( sfxs[ key ].second );
}
return -1;
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何在C++中宏 #define 静态方法调用?
- 如何使用'#define';定义一个宏来执行多个方法
- 是否有一种方法可以将变量列表传递给#Define指令,并导致其通过文字值替换字符串值
- 使用来自其他方法和 #define 的函数定义常量
- 是否可以使用方法返回使用 #define 创建的变量
- 简洁的计算 #define 方法