C ++ элегантный способ передачи (подмножество) опций в функцию

У меня есть функция, точное поведение которой контролируется набором флагов. Большинство из них обычно ложные. Наличие их всех в качестве параметров быстро становится очень грязным.

Я мог бы создать перечисление для флагов:

enum ParseFlags { assignmentPossible = 1, commaDelimits = 2, isConst = 4 };
PExpression ParseExpr(unsigned int flags);

Немного лучше: теперь при вызове функции мне нужно только указать значения, которые я хочу установить, вместо длинного списка bools.

Однако я хотел бы знать, существует ли более элегантный или более общий способ передачи подмножества параметров в функцию. Что делать, если у меня есть не булевы параметры?

Я ищу C ++ (Boost в порядке) способ вызова функции, например:

ParseExpr({ isConst: true; maxDepth: 5 });

где я могу опустить все значения, которые я хочу оставить по умолчанию.

Какие методы и / или библиотеки существуют для этого?

3

Решение

Копирование с дизайн этой библиотеки, у вас может быть класс параметров, который каррирует его методы набора.

class ParseFlags
{
public:
ParseFlags& assignable(bool b) {assignable_ = b; return *this;}
ParseFlags& delimiter(char c) {delimiter_ = c; return *this;}
ParseFlags& constness(bool b) {constness_ = b; return *this;}
private:
bool assignable_ = false;
char delimiter_ = ',';
bool constness_ = false;
};

PExpression ParseExpr(const ParseFlags& = ParseFlags{});

Назови это как

auto exp = ParseExpr(ParseFlags().constness(false).delimiter('.'));
auto exp2 = ParseExpr();

Что почти так же хорошо, как с именованными параметрами.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]