这似乎是个愚蠢的问题,但我从未见过这样的问题!
int operator() (const std::string& s1, const std::string& s2) const
对我来说,运算符是一个 const 成员函数,它返回一个整数且没有变量参数! 但需要两个 const 变量 s1 和 s2?!?!我不明白这一点!
class str_dist_ :
public std::binary_function<std::string, std::string, int> {
public:
int op() (const std::string& s1, const std::string& s2) const
{
if (s1 == s2)
return 0;
else if (s1.empty())
return std::max(s2.size()/2, 1u);
else if (s2.empty())
return std::max(s1.size()/2, 1u);
else
return min_edit_distance(s1, s2, zero_one_cost<char>(' '));
}
std::string empty() const { return std::string(); }
};
最佳答案
operator()
部分表示类型为 str_dist_
的对象可以被“调用”,就好像它是一个函数一样。 (const std::string& s1, const std::string& s2)
告诉我们参数实际上是什么。
例如,假设我们有一个对象 str_dist_ obj;
,以及两个 std::string
对象,str1
和 str2
。然后我们可以这样写
int result = obj(str1, str2);
在幕后,上一行是相同的
int result = obj.operator()(str1, str2);
请注意,第一组括号是成员函数 operator()
名称的一部分,而第二组实际上列出了参数。
如果您想了解更多信息,请查找 Functors 或 Function Objects。这些术语用于指代诸如 str_dist_
对象之类的事物,这些对象具有为其定义的 operator()
。如果您用谷歌搜索其中任何一个术语,您一定会找到很多信息。
关于c++ - 不确定我对 C++ 中函数声明的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591014/