En lenguajes orientados numéricos (Matlab, Fortran), la operación y semántica del rango es muy útil cuando se trabaja con datos multidimensionales. Por ejemplo:Operadores de lenguaje incrustado de dominio C++
A(i:j,k,:n) // represents two-dimensional slice B(i:j,0:n) of A at index k
desgracia C++ no tiene operador de rango (:). por supuesto, se puede emular usando un functor rango/división, pero la semántica es menos limpia que Matlab. Estoy creando un prototipo de dominio de matriz/tensor en C++ y me pregunto si hay alguna opción para reproducir el operador de rango. Todavía me gustaría confiar exclusivamente en el framework C++/prprocessor.
Hasta ahora he visto a través de la onda de refuerzo que podría ser una opción adecuada.
¿hay algún otro medio para introducir nuevos operadores no nativos a C++ DSL?
Sé que no puede agregar nuevos operadores. Estoy buscando específicamente una solución alternativa. Una cosa que se me ocurrió (corte muy feo y no tengo la intención de usar):
#define A(r) A[range(((1)?r), ((0)?r))] // assume A overloads []
A(i:j); // abuse ternary operator
eso es una idea. En principio, puedo reemplazar ':' con algún otro operador binario global que genere rango y use ',' para anexar rango. Estoy al tanto de posibles problemas, solo quiero probarlo, algún tipo de herramienta de desarrollo rápido de aplicaciones – Anycorn
Buena suerte. Tenga cuidado de no chocar con '?:' Y las etiquetas de los especificadores de acceso, los casos de cambio y (si los usa) gotos. De hecho, recomendaría usar algo como '..' porque sería más fácil de analizar. –