我希望在一个类中有静态和常量二维数组。数组相对较大,但我只想初始化几个元素,其他元素可能是编译器初始化它们的值。
例如,如果一个类的定义如下:
class A {
public:
static int const test[10][10];
};
int const A::test[10][10] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 7, 7, 7, 7, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};我只对初始化标记为'7‘的元素感兴趣,如何在相同的元素上执行此操作,但使用更大尺寸的数组,如array1024
发布于 2010-08-12 00:01:34
一个解决方案是将非常数组隐藏在某个地方,从文件或资源中加载它,然后使用常量引用来访问它。也就是说。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef int Array[1024][1024];
namespace DontTouch{
Array arr;
void initArray(){
for (int i = 0; i < 1024; i++)
for (int j = 0; j < 1024; j++)
arr[i][j] = rand() & 0xff;
}
}
const Array &arr = DontTouch::arr;
int main(int argc, char** argv){
DontTouch::initArray();
//arr[4][4] = 0;//compiler error
for (int i = 0; i < 1024; i++){
for (int j = 0; j < 1024; j++)
printf(" 0x%02x", arr[i][j]);
printf("\n");
}
return 0;
}它将比脚本生成的大型数组(IMO)更具可读性。
你可以用类似于二维数组的类来做同样的事情(写起来很简单)。再次强调-在某个地方使用非常量对象,并使用常量引用来访问数据。让非常数组在一个cpp之外完全不可见应该很容易。
另一种方法是使用脚本生成数组。如果你觉得大数组很丑陋,把所有的东西都放到*.h文件中(确保它只包含在一个*.cpp文件中),这样就不会吓跑人了。编译器并不关心你在代码中写了什么,只要它在语法上是正确的。
我不认为还有其他选择。
https://stackoverflow.com/questions/3460074
复制相似问题