消除使用binary_function和result_type

问题描述 投票:0回答:1

我正在尝试将一个废弃的开源库更新为 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++11 c++17 std-function resulttype
1个回答
0
投票

感谢您的建议,我最终能够让它工作。我确实使用了 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;
        }
© www.soinside.com 2019 - 2024. All rights reserved.