Рассмотрим класс, подобный этому:
class MyReferenceClass
{
public:
MyReferenceClass();
const double ImportantConstant1;
const double ImportantConstant2;
const double ImportantConstant3;
private:
void ComputeImportantConstants(double *out_const1, double *out_const2, double *out_const3);
}
Существует подпрограмма (ComputeImportantConstants), которая вычисляет три константы во время выполнения. Предположим, что вычисление довольно сложно и по сути порождает сразу все три значения. Более того, результаты зависят от конфигурации сборки, поэтому жесткое кодирование результатов не является вариантом.
Есть ли разумный способ сохранить эти вычисленные значения в соответствующих двойных полях const класса?
Если нет, можете ли вы предложить более естественный способ объявить такой класс в С++?
В С# я бы использовал статический класс со статическим конструктором здесь, но это не вариант в С++. Я также считал, что делать ImportantConstant1..3 либо неконстантными полями, либо вызовами функций, но оба кажутся низшими.
Единственный способ инициализировать константные поля, которые я нашел, это использовать списки инициализаций, но не представляется возможным передать результаты вычисления с несколькими выходами в таком списке.