Сложные операторы в части инициализации члена? - PullRequest
2 голосов
/ 13 апреля 2009

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

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 ]

9 голосов
/ 13 апреля 2009

Вызов функции:

myClass(const char param1, const char param2) 
             : values( MakeComplicatedDecision( xxx ) ) {
}

и поместите свою логику в функцию.

4 голосов
/ 13 апреля 2009

Вы можете использовать статическую функцию-член, которая будет принимать ваши параметры и возвращать необходимое значение. Это полностью решает проблему и позволяет легко чистить отлаживаемый код.

0 голосов
/ 13 апреля 2009

Вы можете использовать указатель на мультимножество для значений, а затем использовать new для его создания в конструкторе. Это может привести к задержке строительства, но это означает небольшое количество накладных расходов.

...