C++:在我的命名空间中使用重载运算符
C++: use of overloaded operators in my namespace
我正在尝试在库中用 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>
...
}
不工作。
using namespace Foo
被认为是全球使用的不良做法。
在 main
范围内调用我的 operator*
函数的好方法是什么?
如果您像这样重载 *
运算符,我不会过多评论。我要说的是,它会让很多人感到困惑。
您可以只引入运算符而不是整个命名空间。
using Foo::operator*;
double result = l * r;
对于自定义 类,您可以使用 ADL (Argument Dependent Lookup),如下所示:
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;
}
我正在尝试在库中用 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>
...
}
不工作。
using namespace Foo
被认为是全球使用的不良做法。
在 main
范围内调用我的 operator*
函数的好方法是什么?
如果您像这样重载 *
运算符,我不会过多评论。我要说的是,它会让很多人感到困惑。
您可以只引入运算符而不是整个命名空间。
using Foo::operator*;
double result = l * r;
对于自定义 类,您可以使用 ADL (Argument Dependent Lookup),如下所示:
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;
}