这是什么意思:'std :: ios_base& (* F)(标准::的ios_base&安培;))”

时间:2011-12-09 11:53:21

标签: c++

我一直在寻找将字符串转换为int的最佳方法,但我遇到了一个我不理解的函数:

template <class T>
bool from_string(T& t, 
                 const std::string& s, 
                 std::ios_base& (*f)(std::ios_base&))
{
  std::istringstream iss(s);
  return !(iss >> f >> t).fail();
}

我知道模板是什么,我不知道它是什么意思:

std::ios_base& (*f)(std::ios_base&)

这里是否创建了一个新指针,为什么括号中的两个表达式彼此相邻?

3 个答案:

答案 0 :(得分:5)

它是一个指向函数的指针,该函数以std::ios_base&为 参数,并返回std::ios_base&

事实上,它是操纵者的一种形式,不带任何形式 参数。此类型的<<重载只是调用该函数; 然后该函数在流上执行任何它喜欢的操作,返回它。 因此可以通过以下方式调用您的函数:

from_string( anInt, "0A", &std::hex );

答案 1 :(得分:2)

这是指向f并返回std::ios_base&的函数的指针std::ios_base&的声明。

答案 2 :(得分:1)

这是一个名为f的函数指针,它返回std::ios_base&并接受std::ios_base&作为其单个参数。