gpt4 book ai didi

c++ - 如何重载 >> 运算符以采用逗号分隔的变量参数列表

转载 作者:行者123 更新时间:2023-11-30 01:03:36 26 4
gpt4 key购买 nike

--快速之前

因此,在有人说这个问题已在另一篇文章中得到回答之前,它还没有...这是另一篇文章中的作业问题,而最初的问题从未得到回答,只是被告知他们错了。

--问题

我正在尝试重载 >> 运算符,以便能够将 n 个用逗号分隔的变量传递到这样的对象中......

Mat M = (Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);

我正在尝试重用他们对逗号分隔参数列表的使用,但我似乎无法让它发挥作用。

当我像这样重载 << 运算符时

void operator<< (const double& is)
{
std::cout << "hiya " << is << std::endl;
}

并尝试像这样使用它

mat << 1.0, 2.0;

只有第一个值被传递给运算符...第二个值永远不会被“使用”,因为我相信 <<有比,更高的总统

所以我的问题是他们在 eigen 和 openCV 等库中做了什么才能拥有此功能。我查看了他们的代码以试图理解它,但它似乎需要更深入地了解 C++ 的工作原理,而我没有,我希望这里有人可以阐明它。

提前感谢您的任何建议。

最佳答案

您必须重载插入运算符 (<<) 和逗号运算符 (,),这样

mat << 1.0, 2.0;

翻译为:

mat.operator<<(1.0).operator,(2.0);

operator,(operator<<(mat, 1.0), 2.0);

这是一个演示程序,它在没有做任何有用的事情的情况下说明了这个想法。

struct Foo
{
};

Foo& operator<<(Foo& f, double)
{
std::cout << "In operator<<(Foo& f, double)\n";
return f;
}

Foo& operator,(Foo& f, double)
{
std::cout << "In operator,(Foo& f, double)\n";
return f;
}

int main()
{
Foo f;
f << 10, 20, 30;
}

及其输出

In operator<<(Foo& f, double)
In operator,(Foo& f, double)
In operator,(Foo& f, double)

关于c++ - 如何重载 >> 运算符以采用逗号分隔的变量参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52864368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com