我一直在寻找将字符串转换为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&)
这里是否创建了一个新指针,为什么括号中的两个表达式彼此相邻?
答案 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&
作为其单个参数。