首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::unary_function在C++17中的等效替代品是什么?

std::unary_function在C++17中的等效替代品是什么?
EN

Stack Overflow用户
提问于 2020-08-25 10:39:38
回答 1查看 3.2K关注 0票数 15

下面是引起我的一些问题的代码,试图构建并获取错误:

'unary_function基类未定义‘和'unary_function’不是std的成员‘

std::unary_function已经在C++17中被删除了,那么等效的版本是什么呢?

代码语言:javascript
运行
复制
#include <functional>

struct path_sep_comp: public std::unary_function<tchar, bool>
{ 
    path_sep_comp () {}

    bool
    operator () (tchar ch) const
    {
#if defined (_WIN32)
        return ch == LOG4CPLUS_TEXT ('\\') || ch == LOG4CPLUS_TEXT ('/');
#else
        return ch == LOG4CPLUS_TEXT ('/');
#endif
    }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-25 11:06:06

std::unary_function和许多其他基类(如std::not1std::binary_functionstd::iterator )已经逐渐被废弃,并从标准库中删除,因为它们不需要它们。

在现代C++中,概念正在被使用。一个类是否具体从std::unary_function继承并不重要,重要的是它有一个带有一个参数的调用运算符。这就是使它成为一元函数的原因。您将通过使用std::is_invocable、或C++20中的requires等特性来检测这一点。

在您的示例中,您可以简单地从std::unary_function中删除继承。

代码语言:javascript
运行
复制
struct path_sep_comp
{
    // also note the removed default constructor, we don't need that
    
    // we can make this constexpr in C++17
    constexpr bool operator () (tchar ch) const
    {
#if defined (_WIN32)
        return ch == LOG4CPLUS_TEXT ('\\') || ch == LOG4CPLUS_TEXT ('/');
#else
        return ch == LOG4CPLUS_TEXT ('/');
#endif
    }
};
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63577103

复制
相关文章

相似问题

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