这是 Eigen 文档的一部分:
Matrix3f m;
m << 1, 2, 3,
4, 5, 6,
7, 8, 9;
std::cout << m;
输出:
1 2 3
4 5 6
7 8 9
我不明白上面的 operator<< 怎么能捕获所有逗号分隔的值。我做了一个小实验:
cout << "Just commas: ";
cout << 1, 2, 3, 4, 5;
cout << endl;
cout << "Commas in parentheses: ";
cout << ( 1, 2, 3, 4, 5 );
cout << endl;
可以预见(根据我对 C++ 语法的理解)只有一个值被 operator<< 捕获:
Just commas: 1
Commas in parentheses: 5
因此标题问题。
最佳答案
基本思想是重载 <<
和 ,
运营商。
m << 1
重载放置 1
进入m
然后返回一个特殊的代理对象——称之为p
– 持有对 m
的引用.
然后 p, 2
重载放置 2
进入m
并返回 p
,所以 p, 2, 3
会先放2
进入m
然后 3
.
Boost.Assign 也使用了类似的技术, 虽然他们使用 +=
而不是 <<
.
关于c++ - 如何在 C++ 中实现以逗号分隔的初始化,例如 Eigen 中的初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54173111/