获取指向命名空间的函数的指针

时间:2014-07-28 13:53:40

标签: c++ c++11 namespaces function-pointers

我想从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相关的是isspacecount_if来自同一名称空间吗?

编辑:

完成构建日志:

  

应用程序/ Xcode.app /内容/开发商/工具链/ XcodeDefault.xctoolchain / usr / lib中/ C ++ / V1 /算法:1097:1:   候选模板被忽略:无法推断模板参数   '_Predicate'

1 个答案:

答案 0 :(得分:3)

错误与包含(订单和/或在线状态)有关。

有两个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());
});