首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将std::binary_function替换为其他没有痛苦的东西?

如何将std::binary_function替换为其他没有痛苦的东西?
EN

Stack Overflow用户
提问于 2019-05-06 08:06:39
回答 1查看 2K关注 0票数 2

我们目前正在使用一些第三方软件包,其中使用一些std::binary_function,std::unary_function的深处。您可能知道,这些函数在C++14中已经被废弃,现在它们都从C++17中删除了。我们将使用C++17的一些新特性,同时我们不会做一些重大更改,因为它可能会导致代码中的一些不稳定。我们如何简单地替换这些遗留的C++特性(std::binary_function,.)其他痛苦较小的东西。

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-06 08:24:01

我不知道标准库中的任何现有类型,但是创建自己的库并不是什么大事:

代码语言:javascript
复制
template<class Arg1, class Arg2, class Result> 
struct binary_function
{
    using first_argument_type = Arg1;
    using second_argument_type = Arg2;
    using result_type = Result;
};

template <typename ArgumentType, typename ResultType>
struct unary_function
{
    using argument_type = ArgumentType;
    using result_type = ResultType;
};

这两个类都只是用户定义的函数对象的简单基类,例如:

代码语言:javascript
复制
struct MyFuncObj : std::unary_function<int, bool>
{
    bool operator()(int arg) { ... }
};

允许使用一些内置于功能中的标准库的参数别名,例如std::not1std::not1(MyFuncObj())

我猜为什么不推荐这样做是因为在C++11之后,通常使用lambda来创建函数对象。而且,有了不同的模板,就可以很容易地创建not和其他东西的泛型版本,而无需使用std::not1std::not2

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56001160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档