爲什麼不把你的緩衝區包裝在一個簡單的類中,該類包含你想要使用的功能。 使用指針是迭代器的事實可能就足夠了。
template<typename T>
struct RawBuffer<T>
{
RawBuffer(T* in_buffer, size_t in_n) : buffer(in_buffer), n(in_n) {}
T* buffer;
size_t n;
T* begin() { return buffer; }
T* end() { return buffer+n; }
const T* begin() const { return buffer; }
cont T* end() const { return buffer+n; }
T& operator[](size_t i) { return buffer[i]; }
const T& operator[](size_t i) const { return buffer[i]; }
};
現在你可以使用它有點像一個向量:
RawBuffer<MyObject> values(generate_objects(n), n);
//Set an entry
values[1] = MyObject()
//Or use an entry
values[1].do_something();
//Lets use some std functions on the object.
std::for_each(values.begin(), values.end(), my_object_fn);
//Or create a real vector from it
std::vector<MyObject> values_copy(values.begin(), values.end());
如果您還想要管理的內存緩衝區包含,那麼你就需要添加一個destrtuctor和刪除默認的副本構造函數和賦值運算符。
也許你不知道它,但指針是迭代器。 – 2012-08-10 08:52:12
你是否提供緩衝區給C API來填寫,還是爲它分配內存並將其返回給你? – jcoder 2012-08-10 09:03:50
@JohnB它分配內存並提供一個函數,我打電話告訴它再次釋放它。 – Baz 2012-08-10 09:10:59