C++ 11 <<运算符specefic超载
对于一个赋值,我必须按照一些明确的指令对矩阵类进行编码。其中一个指令是超载的< <操作,这样我们就可以读出值的矩阵m这个确切的方法:C++ 11 <<运算符specefic超载
m << 1,2,3,4,5,6;
我试图寻找到具有可变参数的功能,但后来我看到了,我可以”用可变数量的参数超载操作员。
我试图在寻找的std :: initializer_list,使用一些参考代码cpp reference
std::vector<float> mat;
Mat<M,N>& operator<<(std::initializer_list<float> l)
{
this->mat.insert(this->mat.begin(),l.begin(),l.end());
return *this;
}
所以我的问题是,我可以用什么类/类型的参数来实现这一点,选项,我想到了没有工作,或者我没有以正确的方式使用它们。
非常感谢。
编辑: 从@ bames53的伟大答案后,我试图纳入,它的工作很好!
<<
比,
更高的优先级,以便你的表达m << 1,2,3,4,5,6
所做的是:
((((((m << 1), 2), 3), 4), 5), 6)
在您需要m << 1
返回代表在1
已经阅读操作的对象等字,并准备读2
。这种事通常是用“表达式模板”来完成的,但在你的情况下你并不需要模板。
您的使用情况将有一个区别,因为您需要随时修改对象,而通常的表达式模板会懒惰地操作,直到它们的对象在实际执行工作之前转换为最终结果类型为止。
#include <iostream>
// a type to do something with
struct M { int i; };
// a type to represent the operations
struct Input_operation { M &m; int count; };
Input_operation operator << (M &m, int i) {
m.i = i;
return {m, 1};
}
Input_operation operator , (Input_operation op, int i) {
op.m.i += i;
op.count++;
return op;
}
int main() {
M m;
m << 1, 2, 3, 4, 5, 6;
std::cout << m.i << '\n';
}
感谢您的回答,我尽我所能了解您的代码(我不会说我现在就这么做),并运行一些测试以查看它是如何工作的:)!谢谢 –
我试图将其用于我自己的代码中,其中有一个模板矩阵类和一个存储元素的向量,我将编辑我的问题以获得更清晰的代码以显示您 –
非常感谢我收到了它!而且它现在可以在我的代码中正常工作!我想知道是否有可能与我的班级内部的操作员做一个版本 –
这是学校课程的一个复杂任务。无论如何,查找“运营商超载代理类型逗号”,并有乐趣:) –
谢谢我试图找到,我没有找到关于超载逗号的很多信息:s不幸 –
你只是在寻找五分钟,但谷歌给“约218,000结果“为我为您提供的搜索字词。花更长一点的研究。 –