C++ 什么是C+中std::一元函数的等效替换+;17?
以下是导致我出现一些问题的代码,试图构建并获得错误: “一元函数基类未定义”和“一元函数”不是std的成员” 已在C++17中删除,那么什么是等效版本C++ 什么是C+中std::一元函数的等效替换+;17?,c++,stl,c++17,C++,Stl,C++17,以下是导致我出现一些问题的代码,试图构建并获得错误: “一元函数基类未定义”和“一元函数”不是std的成员” 已在C++17中删除,那么什么是等效版本 #包括 结构路径\u sep\u comp:public std::一元函数 { 路径_sep_comp(){} 布尔 运算符()(tchar ch)常量 { #如果已定义(_WIN32) 返回ch==LOG4CPLUS\u TEXT('\\')| | ch==LOG4CPLUS\u TEXT('/'); #否则 返回ch==LOG4CPLUS
#包括
结构路径\u sep\u comp:public std::一元函数
{
路径_sep_comp(){}
布尔
运算符()(tchar ch)常量
{
#如果已定义(_WIN32)
返回ch==LOG4CPLUS\u TEXT('\\')| | ch==LOG4CPLUS\u TEXT('/');
#否则
返回ch==LOG4CPLUS_文本('/');
#恩迪夫
}
};
std::一元函数
和许多其他基类,如std::not1
或std::binary_函数
或std::iterator
已逐渐被弃用并从标准库中删除,因为不需要它们
在现代C++中,概念被用来代替。类是否从std::一元函数
专门继承并不重要,重要的是它有一个接受一个参数的调用运算符。这就是它成为一元函数的原因。您可以通过使用诸如与C++20结合使用或在C++20中使用的特性来检测这一点
在您的示例中,您可以简单地从std::一元函数
中删除继承:
struct path\u sep\u comp
{
//还要注意删除的默认构造函数,我们不需要它
//我们可以在C++17中生成这个constexpr
constexpr bool运算符()(tchar ch)const
{
#如果已定义(_WIN32)
返回ch==LOG4CPLUS\u TEXT('\\')| | ch==LOG4CPLUS\u TEXT('/');
#否则
返回ch==LOG4CPLUS_文本('/');
#恩迪夫
}
};
std::一元函数
已在C++17中删除。你可以删除它-不再需要了。标准库对所有函数使用模板,将可调用对象作为参数。您也可以这样做,而不必为path\u sep\u comp
执行任何继承。IIRC,一元函数在C++17之前的标准库中也不严格需要。你可以在你的函子里手工定义它给你的两个别名。现在不需要这些别名,因此一元函数也不需要。