繁体   English   中英

什么是性病:: unary_function等价置换C ++ 17?

[英]What is an equivalent replacement for std::unary_function in C++17?

下面是这是造成我一些问题,试图建立并得到错误的代码:

“unary_function基类未定义”和“unary_function”不是STD的成员”

std::unary_function已经在C ++ 17被去掉了所以什么是等价的版本?

#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
    }
};

std::unary_function和许多其他基类,如std::not1std::binary_functionstd::iterator已经逐渐弃用,除去标准库中,因为没有必要为他们。

在现代 C++ 中,概念正在被使用。 这是不相关的是否专门从类继承std::unary_function ,它只是重要的,它有一个电话运营商这需要一个参数。 这是什么使得它一元函数。 你应该使用特征,如检测到这种std::is_invocable结合SFINAErequires在C ++ 20。

在你的榜样,你可以简单地删除从继承std::unary_function

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
    }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM