У меня есть функция, которая получает входной буфер размером n
байт и нуждается в вспомогательном буфере размером n
байт для обработки данного входного буфера.
(я знаю, что vector выделяет память во время выполнения, скажем, я использую вектор, который использует статическую предварительно выделенную память. Представьте, что это НЕ вектор STL.)
Обычный подход
void processData(vector<T> &vec) {
vector<T> &aux = new vector<T>(vec.size()); //dynamically allocate memory
// process data
}
//usage:
processData(v)
Поскольку я работаю в режиме реального времени, я хочу заранее выделить всю память, которая мне когда-либо понадобится, заранее.
Буфер выделяется только один раз при запуске. Я хочу, чтобы всякий раз, когда я выделял вектор, я автоматически выделял вспомогательный буфер для своей функции processData
.
Я могу сделать что-то подобное с функцией шаблона
static void _processData(vector<T> &vec,vector<T> &aux) {
// process data
}
template<size_t sz>
void processData(vector<T> &vec) {
static aux_buffer[sz];
vector aux(vec.size(),aux_buffer); // use aux_buffer for the vector
_processData(vec,aux);
}
// usage:
processData<V_MAX_SIZE>(v);
Однако много работать с шаблонами не очень весело (теперь давайте перекомпилируем все, так как я изменил комментарий!), И это заставляет меня вести бухгалтерию, когда я использую эту функцию.
Есть ли более приятные решения этой проблемы?