joh*_*een 5 c++ default-parameters
我很确定这是不可能的,但如果某种方式存在(可能通过编译器提供的宏),它对我来说非常有用,所以我在这里发布它。假设我有一个函数:
void func( int param1, bool param2=false){ ... }
Run Code Online (Sandbox Code Playgroud)
param2这里已经给出了默认值。是否有任何机制可以确定param2是明确设置为其默认值false还是自动传递?换句话说,从 function 内部func,是否可以区分以下两个调用?我正在使用 Microsoft Visual C++ 编译器。
func(1, false);
Run Code Online (Sandbox Code Playgroud)
和
func(1);
Run Code Online (Sandbox Code Playgroud)
您无法区分您询问的方式,但您可以这样做:
void func(int param1, boost::optional<bool> param2=boost::none);
Run Code Online (Sandbox Code Playgroud)
然后你可以检查 param2 是否为 none (它有自己的运算符 bool)。如果它被设置,则意味着它已被传入。调用站点将看起来与以前相同,因为可以从其值类型隐式构造可选值。