C++ boost::可选,解决方法?

C++ boost::可选,解决方法?,c++,boost,overloading,deprecated,boost-optional,C++,Boost,Overloading,Deprecated,Boost Optional,我想用boost::optional重载,但由于重载的不确定性而无法重载,我正在寻找解决方法 例如,由于不明确,以下代码将无法编译: void foo{…} void foocont类&A{…} //\弃用 void fooboost::可选的A{A?fooA:foo} 我之所以想做这种奇怪的事情,是因为,由于boost::optional的右值/左值问题引起的bug,我将用函数重载替换boost::optional实例。问题是出现了一些API中断,所以我需要保留旧的函数定义 API中断的一个示

我想用boost::optional重载,但由于重载的不确定性而无法重载,我正在寻找解决方法

例如,由于不明确,以下代码将无法编译:

void foo{…} void foocont类&A{…} //\弃用 void fooboost::可选的A{A?fooA:foo} 我之所以想做这种奇怪的事情,是因为,由于boost::optional的右值/左值问题引起的bug,我将用函数重载替换boost::optional实例。问题是出现了一些API中断,所以我需要保留旧的函数定义

API中断的一个示例是使用其他默认参数

void fooint a=0,boost::可选a=boost::none,float b=0.0{…} 要求我切换参数的顺序:

void fooint a=0,float b=0.0{…} void fooBar A,int A=0,float b=0.0{…} 但现在情况是这样的 foo1,boost::无,3.14;因此,我想为这种类型的函数调用保留一个不推荐使用的函数定义。有优雅的解决方法吗

我想一个丑陋的可能性是

//\弃用 void fooint a,boost::可选a,float b=0.0{…}
但这并不能激发快乐。有什么想法吗?

作为注释中的状态,您的常规案例有打字错误,它会进行递归调用。固定版本:

void foo() { /*...*/ }
void foo(const Class& A) { /*...*/ }

[[deprecated]] void foo(boost::optional<const Class&> A) { A ? foo(*A) : foo(); }


为什么不作废fooboost::可选的A{A?foo*A:foo}?第二,FooItA= 0,Boo::可选A,浮点B=0不是合法C++,在缺省的情况下不能有非默认的参数。关于亚当的第二个注释,是的,我的错误,相应的编辑问题;Jarod42抱歉,我不熟悉弃用的require或=delete,您能详细说明或提供一个参考资源吗?不,我的意思是,您真的需要弃用的函数吗,或者将其标记为deleted以禁止其使用就够了void foooboost::optional a=delete@Jarod42哦,我明白了-不幸的是,现有代码已经通过boost::none参数,因此删除该函数会破坏其他人的代码:/
void foo(int a=0, boost::optional<Bar> A=boost::none, float b=0.0) { /*...*/ }
void foo(int a = 0) {/*..*/}
void foo(int a, Bar, float b = 0.0f) { /*..*/ }
void foo(int a, boost::none_t, float b = 0.0f) { /*..*/ }

[[deprecated]] void foo(int a, boost::optional<Bar>, float b = 0.0f);