C++将选项(子集)传递给函数的优雅方式
C++ elegant way of passing (a subset of) options to a function
我有一个函数,其确切的行为由一组标志控制。其中大多数通常是错误的。将它们全部作为参数很快就会变得非常混乱。
我可以为标志创建一个枚举:
enum ParseFlags { assignmentPossible = 1, commaDelimits = 2, isConst = 4 };
PExpression ParseExpr(unsigned int flags);
好一点:现在,在调用函数时,我只需要指定要设置的值,而不是一长串bool
。
但是,我想知道是否有一种更优雅或更通用的方法将选项子集传递给函数。如果我有非布尔选项怎么办?
我正在寻找一种C++(Boost 还可以)的方式来调用如下函数:
ParseExpr({ isConst: true; maxDepth: 5 });
我可以省略所有我想保留为默认值的值。
为此存在哪些技术和/或库?
从这个库的设计中翻录出来,你可以有一个参数类来表达它的设置方法。
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();
这几乎与命名参数一样好。
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中将函数压缩为两种方式
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 如何编写具有相同名称的相同函数,该函数在C++中几乎以相似的方式处理不同的类参数?
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- 请描述一下在 c++ 中在此类中定义构造函数的方式?
- 我们如何并行运行算法的 n 个实例并以有效的方式计算结果函数的平均值?
- 用于基于成员字段或函数创建比较器的快捷方式
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 将uint8_t*buffer和size_tbufferlen从C++传递到C中的API函数的最佳方式是什么
- 我是否以错误的方式声明了getpriorityvalues函数
- 如何编写一个递归函数,以随机的方式混淆从0到6的数字
- 以支持继承的方式将自身shared_ptr添加到对象构造函数中的向量中
- 以编程方式在 C++ 中创建函数
- 将函数作为参数传递的两种方式之间的区别
- 程序按执行方式工作,直到我向其添加析构函数为止
- 在 C++ 中使用删除函数的不同方式
- 简单的计数和求和函数没有按照我预期的方式工作
- C++17 中函数参数的指针对齐方式
- 不同的构造函数方式