这个运算符重载函数重载是什么?

时间:2016-02-18 03:15:28

标签: c++ overloading operator-keyword

我正在浏览CMBC源代码并遇到了这段代码:

void goto_symext::operator()(const goto_functionst &goto_functions)
{
  goto_functionst::function_mapt::const_iterator it=
    goto_functions.function_map.find(goto_functionst::entry_point());

  if(it==goto_functions.function_map.end())
    throw "the program has no entry point";

  const goto_programt &body=it->second.body;

  operator()(goto_functions, body);
}

我以前从未见过operator()(args)语法,谷歌搜索似乎没有产生任何结果。

2 个答案:

答案 0 :(得分:4)

正如评论中所回答的那样,()是重载struct Foo { void operator()() { std::cout << "Hello, world!"; } }; Foo f; f(); //Hello, world! 运算符的语法。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

答案 1 :(得分:3)

这将是函数调用操作符,它允许您创建类似函数的对象。

struct Functor {
    bool operator()(int a, int b = 3);
};

bool Functor::operator()(int a, int b /* = 3 */) {
    if ((a > (2 * b)) || (b > (2 * a))) {
        return true;
    } else {
        return false;
    }
}

// ...

Functor f;
bool b = f(5); // Calls f.operator()(5, 3).
bool c = f(3, 5);

它的好处是可以将状态信息保存在类似函数的对象的字段中,如果需要,可以在对象中隐藏操作符的重载版本,而不是让它们暴露。

class Functor {
    int compareTo;

    public:
        Functor(int cT);

        bool operator()(int a);
        bool operator()(char c);
};

Functor::Functor(int cT) : compareTo(cT) { }

bool Functor::operator()(int a) {
    if ((a > (2 * compareTo)) || (compareTo > (2 * a))) {
        return true;
    } else {
        return false;
    }
}

bool Functor::operator()(char c) { return false; }

它可以用来编写可以接受任何函数的代码,而不是依赖于函数指针。 [在这方面与模板配合使用时效果特别好。]

有关详细信息,请参阅herehere