В одном классе Foo i have и enum OperatorsTypes. И метод, который используется для инициализации значений assutiatied с этим перечислением:Каков наилучший подход к инициализации значений, связанных с перечислением?
void InitializeOpTypesCC()
{
_operatorTypeContactCount[OperatorsTypes::CreateChannel] = 3;
_operatorTypeContactCount[OperatorsTypes::CreateOperator] = 1;
_operatorTypeContactCount[OperatorsTypes::DeleteChannel] = 2;
_operatorTypeContactCount[OperatorsTypes::Division] = 2;
_operatorTypeContactCount[OperatorsTypes::Equal] = 1;
_operatorTypeContactCount[OperatorsTypes::GetOperatorContactsCount] = 1;
_operatorTypeContactCount[OperatorsTypes::GetInputOperatorId] = 1;
_operatorTypeContactCount[OperatorsTypes::GetTypeOfOperator] = 1;
_operatorTypeContactCount[OperatorsTypes::If] = 2;
_operatorTypeContactCount[OperatorsTypes::IsChannelExists] = 3;
_operatorTypeContactCount[OperatorsTypes::Minus] = 2;
_operatorTypeContactCount[OperatorsTypes::Multiplication] = 2;
_operatorTypeContactCount[OperatorsTypes::One] = 0;
_operatorTypeContactCount[OperatorsTypes::Plus] = 2;
_operatorTypeContactCount[OperatorsTypes::RandomNumber] = 1;
_operatorTypeContactCount[OperatorsTypes::RemoveOperator] = 1;
_operatorTypeContactCount[OperatorsTypes::Time] = 0;
_operatorTypeContactCount[OperatorsTypes::Nothing] = 0;
}
Curently я звоню этот метод из конструктора. Но я от профилирования, что конструктор метода принимает segnificent tyme il общее время. Поэтому я хочу сделать эту инициализацию и static_operatorTypeContactCount. Не инициализировать его для всех экземпляров. Я отметил InitializeOpTypesCC и _operatorTypeContactCount со статикой и начал получать ошибки привязки. Я читал об этом предельном статическом. Затем я переместил _operatorTypeContactCount и InitializeOpTypesCC в область пространства имен и пометил его как статический. Это работает, но мне нужно вручную вызвать InitializeOpTypesCC и получить неопределенное поведение, когда я забыл, например, в модульных тестах. Каков наилучший способ в этом случае?
Это может быть константный статический массив, но мне нужно, чтобы инициализировать его по индексу, как: Const INT тест [] = { [ind1] = 10, [ind2] = 5, //. //. //. } ;. Не один за другим, как в const char Foo :: array [] = {'1', '2', '3'}; Это не удобно, потому что enume может измениться.
http://stackoverflow.com/q/18784796/1175253 – Sam
Ошибка статического члена класса + компоновщик: похоже, что вы только объявили этот элемент статическим в h-файле и не создали переменную в .cpp-файле. –
Почему вы думаете, что инициализация 18 переменных занимает значительное количество времени? –