我想函数的定义就像分配给左边的部分,例如int f(int x)包含大括号id est之间的代码的正确部分:{... code ...}。

因此,我想将已经定义的函数的地址分配给重载的运算符。
我不会立即定义重载运算符,因为定义的函数(在实际情况下)是依赖于布尔参数的模板化函数。

下面是我希望能够编译的代码示例。
有可能吗? (未将重载运算符定义为对该函数的单个语句调用)

    struct CNT{
        int c;
    };

    CNT addCNT(CNT a,CNT b){
        CNT r;
        r.c = (a.c<=b.c) ? a.c : b.c ;
        return r;
    }


//  CNT operator+(CNT a,CNT b){addCNT(a,b);}

    CNT operator+(CNT,CNT)=&addCNT;


    int main(int argc, char **argv)
    {
        CNT a(10),b(20),c;
        c=a+b;
    }

最佳答案

重载的operator +只是一个函数名。


但是,您尝试使用的方法是:

CNT operator+(CNT,CNT)=&addCNT;


[无效]等同于分配给函数指针

我已经修复了编译错误,并添加了一个指针:

struct CNT {
    CNT(int x) { c = x; };
    CNT() { CNT(0); };

    int c;
};

CNT (*addCNTptr)(CNT a,CNT b);

CNT addCNT(CNT a,CNT b)
{
    CNT r;
    r.c = (a.c<=b.c) ? a.c : b.c ;
    return r;
}

CNT operator+(CNT a,CNT b){ return addCNTptr(a,b); }

//CNT operator+(CNT,CNT)=&addCNT;

int
main(int argc, char **argv)
{

    addCNTptr = addCNT;

    CNT a(10),b(20),c;
    c=a+b;

    return c.c;
}

关于c++ - 为运算符(operator)重载功能分配兼容的功能地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36069723/

10-09 08:18
查看更多