在成员函数中使用operator()

时间:2012-07-09 10:49:45

标签: c++ operator-overloading

我在我的一个类中重载了operator(),我想在另一个成员函数中使用它。

class A {
public:
    void operator()();
    void operator()(double x);
};

void A::operator()() {
    // stuff
};

void A::operator()(double x) {
    // stuff with other members and x
    this->operator();
};

this->operator()行不起作用。我只想使用我定义为我的类A的成员函数的运算符。我得到的错误是:Error 1 error C3867: 'A::operator ()': function call missing argument list; use '&A::operator ()' to create a pointer to member

3 个答案:

答案 0 :(得分:9)

你应该写:

void A::operator()(double x) {
    // stuff with other members and x
    this->operator()();
};

第一个()是运算符的名称,第二个是调用本身:这是错误消息中缺少的(空)参数列表。

答案 1 :(得分:0)

在指向对象的指针上调用成员函数的语法是:

ptr->memberName();

在您的案例中,成员名称为operator(),因此您要编写

ptr->operator()();

或其他变体

ptr->operator()(1.0);   // operator() accepting single argument of type double

定义operator()同样如此 - 你到处都缺少一对parenteses。

答案 2 :(得分:0)

经验法则:

运算符重载函数的名称始终 operator@,其中@是重载运算符。

要直接通过名称调用operator-overload-function,请输入operator@(params)operator() (...)