用索引定义数组值
#define an array value with index
出于遗留原因,我需要维护旧的数组结构,但是编译器告诉我,我的'表达式语法'有问题。
我有:
#define Array[GlobalIndexVariable] Get(GlobalIndexVariable)->SubType;
Get
返回指向结构体的有效指针,该结构体包含SubType
现在我想象这是采取Array[GlobalIndexVariable]
的每一个场合,并简单地将其转换为函数调用,但显然我错了。
我甚至不知道在这种情况下要搜索什么,所以如果有一点帮助,我将非常感激。
非常感谢。
编辑:因为它被询问了,下面是抛出错误的其中一行:
LocalVariable = Array[GlobalIndexVariable];
我想强调的是,我不想把它变成一个macro
,而只是想用Get(GlobalIndexVariable)
代替Array[GlobalIndexVariable];
,所以只要使用GlobalIndexVariable
以外的任何东西,替换就会失败并抛出不同的错误。
只是为了确保我被理解了:
现在我有4个类型为int
的长数组。我想把它们塞进一个结构体中,以标记它们属于一起(它们描述了同一事物的不同方面),但是我需要对前面的代码片段(几千个出现)进行批量解决方案。
:
int Index = 2;
int Array1[ANZ] = { 0, 1, 2 };
int Array2[ANZ] = { 0, 1, 2 };
int Array3[ANZ] = { 0, 1, 2 };
int Array4[ANZ] = { 0, 1, 2 };
if(Array1[Index] == 2) //doSomething
新:struct {
int Type, Conf, Foo, Bar;
};
if(Array1[Index] == 2) //doSomething
不触及Array1[Index] == 2
,是否有可能使用定义或其他东西来获得与旧代码完全相同的行为?
使用自定义类型,您可以
struct MyType
{
int& operator[](int index) const { return Get(GlobalIndexVariable)->SubType; }
};
#define Array MyType{}
和
Array[GlobalIndexVariable]
将被
取代MyType{}[GlobalIndexVariable]
将调用
Get(GlobalIndexVariable)->SubType;
你的问题在你的#define
#define Array[GlobalIndexVariable] Get(GlobalIndexVariable)->SubType;
[]不是宏调用的有效语法。如果你正在使用c++,你可以为你的数组类型写一个运算符[]。如果你在C区,你就有点麻烦了。您可能需要将所有内容替换为圆括号,而不是方括号。
我将执行替换,编写如下
#ifdef USE_OLD_SYNTAX
# define GET_ARRAY_VALUE(globalIndex) Array[globalIndex]
#else
# define GET_ARRAY_VALUE(globalIndex) Get(globalIndex)->SubType;
#endif
然后在你的代码中使用GET_ARRAY_VALUE
,并通过查找和替换你之前的代码来检查USE_OLD_SINTAX
你想使用哪个定义。
但也许它可以更简单的查找和替换在你的代码中没有宏。
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- C++编程从外部文本文件定义数组大小
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 删除动态数组时未定义标识符
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 模板类中的数组定义
- C 结构数组定义
- 在C++中为指针数组定义NULL
- 为什么局部变量不隐藏数组定义中的全局变量
- 静态数组定义错误 C++
- C++ 二维数组定义
- 这是否是 C++ 中的有效 2D 数组定义
- 模板类数组定义不是类型名称、静态或枚举器C++
- 用静态2d数组定义类的方便方法是什么(并且2d数组的大小只有在编译时才知道)
- 如何将字符数组定义为常量
- 二维数组定义
- 如何保护数组定义,防止使用非零值进行不完整的初始化
- 为3D数组定义setter/getter属性
- 在静态成员数组定义中对自身使用sizeof操作符