C++ 有没有办法增加一个宏?
不知道该怎么说,但是,有没有办法增加一个宏 我有几个偏移量宏,第一个定义的偏移量必须为零,下一个必须为1,依此类推。 如果需要将偏移量宏添加到列表的中间,则手动增加其下方的所有偏移量可能会很麻烦C++ 有没有办法增加一个宏?,c++,C++,不知道该怎么说,但是,有没有办法增加一个宏 我有几个偏移量宏,第一个定义的偏移量必须为零,下一个必须为1,依此类推。 如果需要将偏移量宏添加到列表的中间,则手动增加其下方的所有偏移量可能会很麻烦 //How can I turn this... // v This number needs to increment by 1 (no matter the order) #define OFFSET_X 0 #define OFFSET_Y 1 #define OFFS
//How can I turn this...
// v This number needs to increment by 1 (no matter the order)
#define OFFSET_X 0
#define OFFSET_Y 1
#define OFFSET_Z 2
#define OFFSET_W 3
//Into something like this... (order of macros swapped yet the numbering still goes from 0 to 3)
int num = 0;
#define OFFSET_Z num++ // = 0 (was 2)
#define OFFSET_Y num++ // = 1 (was 1)
#define OFFSET_X num++ // = 2 (was 0)
#define OFFSET_W num++ // = 3 (was 3)
按照原来的顺序,
#define OFFSET_X 0
#define OFFSET_Y (OFFSET_X + 1)
#define OFFSET_Z (OFFSET_Y + 1)
#define OFFSET_W (OFFSET_Z + 1)
或者在你文章的第二部分修改了顺序
#define OFFSET_Z 0
#define OFFSET_Y (OFFSET_Z + 1)
#define OFFSET_X (OFFSET_Y + 1)
#define OFFSET_W (OFFSET_X + 1)
由于所有这些都是在编译时计算的,所以无论如何,没有性能命中
如果你真的很无聊,你也可以编写一个代码生成器,让它为你生成值
或者只使用枚举。这就是它们的用途,而且它们被编译器视为常量,但是你会得到编译时错误检查,这对于宏来说是非常不有效的
但是,更好的解决方案可能是在C++11中添加constexpr
在任何情况下,如果你只有四个,这是过分的 只需使用枚举:
enum class offsets {
X = 0,
Y = 1,
Z = 2,
W = 3
};
别担心。想要自动递增吗?更简单的是:
enum class offsets { X = 0, y, z, w };
为了同样的效果
注意我建议使用enum类
,因此用法是offsets::X
,offsets::Y
等等
在某些情况下,您可能更喜欢使用
constexpr std::array
,然后可以对其进行迭代(这是宏或枚举所无法做到的).改用枚举
?\uuuuu计数器\uuuuuuu
不是标准的afaik。我最好的梦想是宏的死亡。看起来你是在重新创建枚举。没有任何开销。它的性能完全相同。(枚举是编译时常量)