C++:在我的命名空间中使用重载运算符

C++: use of overloaded operators in my namespace

本文关键字:重载 运算符 命名空间 我的 C++      更新时间:2023-10-16

我正试图在库中用C++实现标量乘积:

namespace Foo
{
    double operator* (vector<double> left, vector<double> right)
    {
        ...
    }
}

但我在主程序中调用它时遇到了问题。调用

int main (void)
{
    ...
    double result = Foo::operator* (l, r);
    ...
}

不是一个好的解决方案,而:

int main (void)
{
    ...
    double result = l * r; //l, r are vector<double>
    ...
}

不起作用。

CCD_ 1被认为是全球使用的不良做法。

main范围内调用我的operator*函数的好方法是什么?

如果您应该像这样重载*运算符,我不会过多评论。我想说的是,这会让很多人感到困惑。

您可以只引入运算符,而不是整个命名空间。

using Foo::operator*;
double result = l * r;

对于自定义类,您可以使用ADL(参数相关查找),如下所示:

namespace Foo
{
    struct dvector : public vector<double> 
    { };
    double operator*(dvector left, dvector right)
    {
        return 0;
    }
}
int main (void)
{
    Foo::dvector l, r;
    double result = l * r;
    return 0;
}