我非常确定这是不可能的,但是如果某种方式存在(也许通过编译器提供的宏),这对我来说将非常有用,所以我将其发布在这里。假设我有一个函数:
void func( int param1, bool param2=false){ ... }
此处为
param2
提供了默认值。是否有任何机制可以确定param2
是否已显式设置为其默认值false
还是已自动传递?换句话说,从函数func
中,可以区分以下两个调用吗?我正在使用Microsoft Visual C++编译器。func(1, false);
和
func(1);
最佳答案
您无法区分您的询问方式,但是您可以这样做:
void func(int param1, boost::optional<bool> param2=boost::none);
然后,您可以检查param2是否为空(它有自己的运算符bool)。如果已设置,则表示它已传入。调用站点的外观将与以前相同,因为可以从其值类型隐式构造一个可选项。