Куда поместить массивы констант времени компиляции?

Скажем, у меня есть массив, в котором хранятся первые 10 простых чисел, например:

const int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};

Это все очень хорошо и просто, если у меня есть 1 файл .cpp. Однако, если у меня есть несколько файлов .cpp, я действительно не знаю, куда поместить этот массив.

Очевидным решением было бы следующее:

// primes.h:
extern const int primes[10];

// primes.cpp:
extern const int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};

Однако проблема в том, что массив простых чисел больше не является компилируемым постоянная времени. Скажем, x.cpp хочет выполнить тяжелые вычисления с участием простых чисел [k] с постоянной времени компиляции ka, он должен будет выполнить фактический поиск в памяти. Мне это не нравится.

Итак, где мне разместить этот массив, чтобы:

  1. Он только один раз в двоичном (не один раз на файл .cpp)
  2. массив [SOME_CONSTANT] также является временем компиляции constant

Править

как насчет этого?

inline int prime(int i) {
    static const int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
    return primes[i];
}

PS: Даже "очевидное решение" выше заняло у меня довольно много времени, чтобы написать. Очевидно, константные переменные имеют внутреннее связывание по умолчанию, поэтому мне пришлось добавить extern в файл primes.cpp, чтобы он заработал.

8
задан Migi 18 February 2011 в 21:38
поделиться