我正在尝试将一个废弃的开源库更新为 C++11 和 17。它使用
std::binary_function
及其 result_type
,我不知道如何删除。这些功能在 C++11 中已弃用,并在 17 中删除。
首先,我只是从
this中删除了
std::binary_function
(和 std::unary_function
)。
接下来,我不确定如何在像this这样的地方消除 result_type 的使用。
template<class R, int D, class F>
static Vector<typename F::result_type, D> apply(const F &func, const VRD &v)
{
Vector<typename F::result_type, D> out;
_apply(func, v, out);
return out;
}
我尝试用
Vector<typename F::result_type, D>
替换 auto
,但我的编译器(当前设置为 C++11)抱怨 C++14 中引入了用于返回类型的 auto
。
F
是一个通用函子。当我不知道result_type
是什么时,如何重写上面的代码?
感谢您的建议,我最终能够让它工作。我确实使用了 C++17 功能,因此该版本无法在 C++11 上运行。
结果发布于here。最终需要许多技术——取决于 result_type 是作为返回类型、作为参数类型还是作为函数内的变量类型出现。上面的示例中说明了其中两个。
上面的例子最终看起来像这样......
template<class R, int D, class F>
static decltype(auto) apply(const F &func, const VRD &v)
{
Vector< decltype( func( v[0] ) ), D > out;
_apply(func, v, out);
return out;
}