Any*_*orn 7 c++ dns dsl operators dsel
在面向数字的语言(Matlab,Fortran)中,范围运算符和语义在处理多维数据时非常方便.例如:
A(i:j,k,:n) // represents two-dimensional slice B(i:j,0:n) of A at index k
Run Code Online (Sandbox Code Playgroud)
遗憾的是,C++没有范围运算符(:).当然它可以使用范围/切片仿函数进行仿真,但语义不如Matlab干净.我在C++中使用矩阵/张量域语言进行原型设计,我想知道是否有任何选项可以重现范围运算符.我仍然只想依赖C++/prprocessor框架.
到目前为止,我已经查看了可能是合适选项的增强波.
还有其他方法可以将新的非本地运营商引入C++ DSL吗?
我知道你不能添加新的operator.am专门寻找解决方法.我提出的一件事(非常丑陋的黑客,我不打算使用):
#define A(r) A[range(((1)?r), ((0)?r))] // assume A overloads []
A(i:j); // abuse ternary operator
Run Code Online (Sandbox Code Playgroud)
我之前使用过的解决方案是编写一个外部预处理器来解析源代码并用普通 C++ 替换自定义运算符的任何使用。出于您的目的,a : b使用将被替换为类似a.operator_range_(b), 的声明,并且operator:()声明将被替换为 的声明range_ operator_range_()。然后在 makefile 中添加一条规则,在编译源文件之前对其进行预处理。在 Perl 中这可以相对容易地完成。
但是,由于过去使用过类似的解决方案,我不推荐它。如果您不对源代码的处理和生成方式保持警惕,则可能会造成可维护性和可移植性问题。
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |