我有一个函数,接收一个n
字节的输入缓冲区,并需要一个n
字节的辅助缓冲区来处理给定的输入缓冲区。
(我知道vector会在运行时分配内存,假设我正在使用一个使用静态预分配内存的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);
然而,大量使用模板并不是很有趣(现在让我们重新编译一切,因为我改了一条评论!),并且每当我使用此功能时都需要做一些簿记。
是否有更好的设计来解决这个问题呢?