Сложные операторы в части инициализации члена?

У меня есть это:

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 создать его в конструкторе. Это задержало бы строительство, но это означает небольшое количество накладных расходов.

Другие вопросы по тегам