How could comma separated initialization such as in Eigen be possibly implemented in C++?(诸如 Eigen 中的逗号分隔初始化如何可能在 C++ 中实现?)
问题描述
这是 Eigen 文档的一部分:
Matrix3f m;m <<1, 2, 3,4, 5, 6,7、8、9;std::cout <<米;
输出:
1 2 34 5 67 8 9
我无法理解运算符如何捕获所有逗号分隔的值<<多于.我做了一个小实验:
cout <<只是逗号:";cout <<1、2、3、4、5;cout <<结束;cout <<括号中的逗号:";cout <<(1、2、3、4、5);cout <<结束;
可以预见(根据我对 C++ 语法的理解)只有一个值被 operator<<<:
只有逗号:1括号中的逗号:5
因此标题问题.
基本思想是重载 <<
和 ,
运算符.p>
<代码>m <<1被重载将1
放入m
,然后返回一个特殊的代理对象–称之为 p
–持有对 m
的引用.
然后p,2
被重载将2
放入m
并返回p
,这样p, 2, 3
会先将 2
放入 m
再放入 3
.
类似的技术用于 Boost.Assign,尽管他们使用 +=
而不是 <<
.
Here's a part of Eigen documentation:
Matrix3f m;
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
std::cout << m;
Output:
1 2 3
4 5 6
7 8 9
I couldn't understand how could all the comma separated values be captured by operator<< above. I did a tiny experiment:
cout << "Just commas: ";
cout << 1, 2, 3, 4, 5;
cout << endl;
cout << "Commas in parentheses: ";
cout << ( 1, 2, 3, 4, 5 );
cout << endl;
Predictably (according to my understanding of C++ syntax) only one of the values was captured by operator<< :
Just commas: 1
Commas in parentheses: 5
Thus the title question.
The basic idea is to overload both the <<
and the ,
operators.
m << 1
is overloaded to put 1
into m
and then returns a special proxy object – call it p
– holding a reference to m
.
Then p, 2
is overloaded to put 2
into m
and return p
, so that p, 2, 3
will first put 2
into m
and then 3
.
A similar technique is used with Boost.Assign, though they use +=
rather than <<
.
这篇关于诸如 Eigen 中的逗号分隔初始化如何可能在 C++ 中实现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:诸如 Eigen 中的逗号分隔初始化如何可能在 C++ 中实现?
基础教程推荐
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01