我正在考虑使用类似索引的matlab访问C ++数组,例如a[1 , :]
。这将非常方便。
我重载了operator [],但似乎不可能有a[1, : ]
语法。
我想出的解决方案是编写一个脚本,该脚本预处理C ++源代码并将a[1, :]
转换为C ++函数,例如col(a, 1)
。但这似乎很费力。
有没有人有更好的解决方案?谢谢!
答案 0 :(得分:6)
我想出的解决方案是编写一个脚本,它预处理C ++源代码并将[1,:]转换为C ++函数,例如col(a,1)。但这似乎很费力。
它也很脆弱,容易出错,复杂化复杂,混合任何错误和模糊。你最好使用宏(你永远不应该使用这样的宏)。
有没有人有更好的解决方案?
您是否考虑过简单地添加一个能够满足您需求的功能?语法不会使用数组索引,但是对于任何查看代码(包括你自己两年后)和显式代码的人来说都会很熟悉(因为函数名称会说明函数的作用)。
答案 1 :(得分:3)
Boost multi array提供了1索引和列视图。 range()
替换了matlab运算符:
。
您还可以从文档
中定义此示例中的数组视图myarray[ boost::indices[range()][range() < 5 ][4 <= range().stride(2) <= 7] ]
这相当于matlab
myarray(:,1:4,4:2:7)