Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是C+中std::一元函数的等效替换+;17?_C++_Stl_C++17 - Fatal编程技术网

C++ 什么是C+中std::一元函数的等效替换+;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

以下是导致我出现一些问题的代码,试图构建并获得错误:

“一元函数基类未定义”和“一元函数”不是std的成员”

已在C++17中删除,那么什么是等效版本

#包括
结构路径\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之前的标准库中也不严格需要。你可以在你的函子里手工定义它给你的两个别名。现在不需要这些别名,因此一元函数也不需要。