c++ - vector/array bounds check only when a define is declared -
i've create own container inherited vector. reimplement operator[]
in way makes checking bounds decided #define.
so putting example, , ignoring template parmameters they're complicated , irrelevant
class myarray : vector<double> { //... virtual double& operator[](const size_type& index); virtual const double& operator[](const size_type& index) const; //... } double& myarray::operator[](const size_type& index) { #ifdef debug_enabled return this->at(index); #else return (*this)[index]; #endif }
however, doesn't work because since operator[]
overloaded, calling operator[]
@ #else
become recursive.
i make check bounds based on #define, , not based on whether use std::vector<>::at()
or std::vector<>::operator[]
.
how can resolve this?
edit: since it's offered lot use std::vector member instead of inheriting, have mention doing isn't solution me because i'll have reimplement member functions of std::vector. that's not pleasant do!
simply call base class member functions required:
double& operator[](size_type index) { #ifdef debug_enabled return std::vector<double>::at(index); #else return std::vector<double>::operator[](index); #endif }
you should provide const
version of too. note don't want make operator virtual
.
Comments
Post a Comment