Инициализация массива членов статического класса нетривиальным выражением в C++11

Я хотел бы оценить производительность использования константного кеша для некоторой статической функции внутри кеша. Итак, у меня есть что-то вроде этого:

class Foo {

    static double cost(int factor) { <moderately complex function> };

    // Other stuff using the cost() function

};

И я хотел бы сравнить с альтернативной версией, такой как эта:

class Foo {
    private:
        static double _cost(int factor) { <same function as before> };
        static const double cost_cache[MAX_FACTOR] = ???;
    public:
        static double cost(int factor) { return cost_cache[factor]; };
    // Other stuff
}

Способом инициализировать мой массив cost_cache способом, эквивалентным

for (int idx = 0; i < MAX_FACTOR; ++i)
    cost_cache[idx] = _cost(idx);

В функциональном языке высокого уровня я бы использовал примитив карты. Как мне правильно инициализировать это в С++ 11 (или С++ 14?) Я видел другие сообщения, посвященные аналогичным вопросам, например Инициализация частного члена static const array, но его решение неприменимо в моем случае, я не могу привести 10k значений дословно в источнике.

Я использую clang++


person b0fh    schedule 05.06.2015    source источник


Ответы (1)


Как насчет того, чтобы сначала инициализировать массив с помощью «{}», а затем перезаписать элементы методом, который загружает значения из файла?

person Josh Seikwang Chung    schedule 05.06.2015
comment
Но, насколько мне известно, для этого потребуется удалить модификатор const из массива, и я не хочу терять безопасность этого типа. - person b0fh; 05.06.2015