首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用循环初始化常量数组?

使用循环初始化常量数组?
EN

Stack Overflow用户
提问于 2016-01-22 12:46:00
回答 1查看 2.1K关注 0票数 2

我有一个常量查找表,它是由相当稀疏的“魔术数字”/枚举值键构成的,因此标准的{}位置初始化最多只能是令人难以置信的乏味。

我尝试在一个单独的源文件"constants.cpp“中初始化它

代码语言:javascript
复制
#define SORT_ARRAY_SIZE 1024
size_t kSortArray[SORT_ARRAY_SIZE];

void InitializeSortArray()
{

    //  Only a subset of the reserved SORT_ARRAY_SIZE positions are used.
    //  Which ones are compile-time "magic numbers".
    for (int i = 0; i < SORT_ARRAY_SIZE; ++i)
    {
        switch (i)
        {
        case 57:  //  Magic number #1.
            kSortArray[i] = 0;
            break;
        case 213:  //  Magic number #2.
            kSortArray[i] = 1;
            break;
        }
    }
}

然后在头文件constants.h中将其设置为外部

代码语言:javascript
复制
#ifndef CONSTANTS_H
#define CONSTANTS_H

#define SORT_ARRAY_SIZE 1024
extern size_t kSortArray[SORT_ARRAY_SIZE];
#endif

然后在主文件binner.c中使用它。

代码语言:javascript
复制
int main(int argc, char* argv[])
{
    kSortArray[0] = 3;  //  Compile-time error desirable.
    return 0;
}

所有这些都很好地编译和工作,只是main中的赋值不会导致编译时错误,因为我还没有将"kSortArray“声明为常量。但是,当我尝试在"constants.h / constants.cpp“中包含一个常量关键字时,就会出现错误。这种方法注定要失败吗?

我尝试了其他一些建议,比如将其放入类中和使用构造函数,但我的尝试抛出了各种模板错误。

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-22 13:03:46

我建议这样做

代码语言:javascript
复制
//   in the header

//   include whatever header you're using to declare size_t

const size_t SORT_ARRAY_SIZE = 1028;
extern const size_t *kSortArray;

//  in your constants compilation unit


namespace
{
    static size_t the_array[SORT_ARRAY_SIZE];
}

const size_t *kSortArray = ::the_array;

然后更改您的InitializeSortArray(),使其初始化::the_array

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34947087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档