4

我正在考虑使用 matlab 之类的索引来访问 C++ 数组,例如a[1 , :]. 这将非常方便。

我重载了运算符 [],但似乎不可能有a[1, : ]语法。

我想出的解决办法是写一个脚本,对C++源代码进行预处理,变成a[1, :]一个C++函数,比如col(a, 1). 但这似乎很费力。

有没有人有更好的解决方案?谢谢!!

4

2 回答 2

6

我想出的解决办法是写一个脚本,对C++源代码进行预处理,把a[1, :]变成C++函数,比如col(a, 1)。但这似乎很费力。

它也很脆弱、容易出错、复杂化、混合任何错误和晦涩难懂。你最好使用宏(而且你永远不应该使用这样的宏)。

有没有人有更好的解决方案?

您是否考虑过简单地添加一个功能来满足您的需求?该语法不会使用数组索引,但是任何查看代码的人(包括两年后的您自己)都会熟悉它并且是显式的(因为函数名称会说明函数的作用)。

于 2013-09-04T11:09:38.580 回答
3

Boost 多数组提供 1 索引和列视图。range()替换 matlab 运算符:

您还可以从文档中定义数组视图,如本示例中的

myarray[ boost::indices[range()][range() < 5 ][4 <= range().stride(2) <= 7] ]

相当于matlab

myarray(:,1:4,4:2:7)
于 2013-09-04T11:43:04.677 回答