Сложные операторы в части инициализации члена?
У меня есть это:
struct myClass{
multiset<string,binPred<string> > values ;
myClass(const char param1, const char param2) : values(less<string>())
{ }
} ;
Мне нужно инициализировать values
член с другим функтором в зависимости от значений param1
а также param2
, К сожалению, логика решить, какой функтор использовать, не так проста и однажды values
Я не могу изменить связанный с ним функтор сравнения.
Итак... Мне нужно было бы поместить всю эту логику принятия решения в часть инициализации члена, но я не знаю, как в стороне, используя ?:
оператор.
Можно ли поставить более сложные заявления там?? (лайк switch
staments)
Если нет, есть ли способ отложить строительство values
так я могу инициализировать его в теле конструктора??
Благодарю.
3 ответа
Вы можете использовать статическую функцию-член, которая будет принимать ваши параметры и возвращать необходимое значение. Это полностью решает проблему и позволяет легко чистить отлаживаемый код.
Вызов функции:
myClass(const char param1, const char param2)
: values( MakeComplicatedDecision( xxx ) ) {
}
и поместите свою логику в функцию.
Вы можете использовать указатель на мультимножество для значений, а затем использовать new
создать его в конструкторе. Это задержало бы строительство, но это означает небольшое количество накладных расходов.