我有一个功能
foo(int, int, int, int/long long/_int64/double/long double/char *, int ONLY IF previous char * - otherwise unneeded)
问题是,由于需要字符串副本,char * 实现与值类型不同。是的,这是旧代码的接口,所以我不能使用 std::string :/
目前,我将它作为模板,以及 char * 的函数重载,并带有额外的参数。但是,其他类型的所有操作在 char * 上也是有效的,所以如果调用者忘记了最后一个参数,函数会默默地匹配模板,从而产生错误的逻辑。
有什么方法可以强制在函数模板中使用重载/使用默认参数/允许特定类型使用不同签名(额外参数)而不默默匹配较小签名的东西?
更多:还不能访问 C++11,但我愿意看到使用它来帮助推动采用的建议。没有提升,但和上面一样
我也试过
return_type foo(int,int,int,typename std::enable_if<!std::is_pointer<T>::value, T>::type & value2update)
没有任何运气。然后它声称带有双 & 参数的调用无法匹配。