Al implementar el operador [], ¿cómo debo incluir la verificación de límites?

En primer lugar, me disculpo por el largo camino hasta una pregunta tan simplista.

Estoy implementando una clase que sirve como un índice bidimensional muy largo en una curva de relleno de espacio o la tupla n que representa la coordenada cartesiana a la que corresponde el índice.

<code>class curvePoint
{
public:
    friend class curveCalculate;

    //Construction and Destruction
    curvePoint(): point(NULL), dimensions(0) {}
    virtual ~curvePoint(){if(point!=NULL) delete[] point;}

    //Mutators
    void convertToIndex(){ if(isTuple()) calc(this); }
    void convertToTuple(){ if(isIndex()) calc(this); }
    void setTuple(quint16 *tuple, int size);
    void setIndex(quint16 *index, int size);
    void setAlgorithm(curveType alg){algorithm = alg;}

    //Inspectors
    bool isIndex(){return current==Index;}
    bool isTuple(){return current==Tuple;}
    size_t size(){return dimensions;}
    quint16 operator[](size_t index);

    enum curveType{HilbertCurve, ZCurve, GrayCodeCurve};
    enum status{Index, Tuple};

private:
    curveCalculate calc;
    curveType algorithm;
    quint16 *point;
    size_t dimensions;
    status current;
};
</code>

(La longitud de la matriz apuntada porpunto esdimensiones)

De todos modos, en la implementación del operador [] me preguntaba cuál es el mejor método para lograr la verificación de límites. Quiero evitar lanzar excepciones si es posible, y el rango completo de valores es utilizable para cada número en la matriz, por lo que tampoco es posible un valor especial para devolver en caso de un error fuera de límites;

Estaba pensando en algo como esto aunque implementado en la definición de la clase:

<code>quint16 curvePoint::operator[](size_t index)
{
    return point[ index % dimensions ];
}
</code>

Esto hace que nunca dejemos los límites de la matriz y, si está bien documentado, creo que estaría bien; Sin embargo, estoy al tanto de esta implementación en particular.

¿Esto parece aceptable para los demás? ¿Hay alguna otra manera de hacer comprobaciones de límites mientras se cumplen mis limitaciones?

Edición: El cálculo de cosas como las curvas de Hilbert, etc. son bastante desordenadas, lo suficientemente desordenado como para que no quiera la interfaz adicional para las bibliotecas STL en el camino.

Además, porque tendré que convertir muchos miles de estos cada vez que se consulte la base de datos multidimensional, no quiero que el costo adicional de las llamadas a la función stl en la combinación, si es posible.

Me gusta más la idea de la afirmación; pero, si recuerdo correctamente, eso se rompe en las versiones de lanzamiento, ¿no es así?

Supongo que puedo usar excepciones, eso parece ser lo que todos están apoyando, pero estoy usando las bibliotecas Qt y esas evitan las excepciones tanto para el rendimiento como para la portabilidad y esperaba hacer lo mismo.

Respuestas a la pregunta(13)

Su respuesta a la pregunta