获取指向在命名空间中声明的函数的指针
Get pointer to function declared into namespace
我想计算std::string
中的空格。对于std::count_if
来说非常简单的任务所以我写了下面的代码:
std::cout<<std::count_if(str.cbegin(), str.cend(), &std::isspace);
…编译错误(xcode): No matching function for call to 'count_if'
我改成:
std::cout<<std::count_if(str.cbegin(), str.cend(), &isspace);
编译错误已经不在了
你能解释一下第一行有什么问题吗?当函数在命名空间中获得函数指针时,我是否错过了一些东西?这是否与ADL相关,因为isspace
和count_if
来自相同的名称空间?
完整构建日志:
应用程序/xcode/内容/开发/工具链/XcodeDefault.xctoolchain/usr/lib/c++/v1/算法:1097:1:候选模板被忽略:无法推断模板参数"_Predicate"
错误与包含(顺序和/或存在)有关。
有两个std::isspace
函数,一个接受单个参数,另一个接受2个参数。第一个在<cctype>
中声明,第二个在<locale>
中声明。
int isspace ( int c );
和
template <class charT>
bool isspace (charT c, const locale& loc);
通常,在c++ 11中,计数可以写成
std::count_if(str.cbegin(), str.cend(), [](char c) {
return std::isspace(c, std::locale());
});
相关文章:
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 在c++中在类外声明函数有什么好处
- 使用 #define 声明函数
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- 如何强制编译器在 C/C++ 本身中声明函数?
- 如果您只需要在 .h 文件中声明函数.cpp是否需要在 .h 文件中声明函数?
- C++:<sys/sysctl.h> 无法声明函数CTL_HW和HW_NCPU
- 尝试声明函数的局部变量,但得到范围错误
- 如何在C++模板中声明函数
- 如何在另一个文件的类中声明函数
- 使用非类型模板参数正向声明函数模板
- 在此范围错误中未声明函数错误
- 当我们不能声明函数内联(GCC 编译器)时?
- 未在此作用域中声明函数,即使存在头文件也是如此
- 无法声明函数中的模板类型别名
- 单个CPP文件中多次声明函数声明可以吗?
- 编译一个支持VBA中声明函数的dll
- 使用从外部参数包中获取的参数类型声明函数
- 使用类成员正确地声明函数
- 在函数内重新声明函数