我想實現一個簡單的模板ObjectPool類的類。 它有一個固定大小的矢量作爲成員變量,其中的元素'在創建時默認初始化。 這已經完成,工作正常。任意數量的帶模板類的參數賦值
問題是什麼是向成員矢量分配新元素的最佳方式是什麼?
我實現了add_old_way成員函數,它能夠將任何類型的數據添加到ObjectPool中,並且工作正常。 我唯一的問題是,我創建了一個額外的對象,我傳遞給該函數,並在裏面,我只是把它扔掉後分配。如果我們正在談論巨型課程,就會浪費資源。
我該如何實現add_new_way函數能夠取任意參數並將它們分別賦值給向量元素?
請注意ObjectPool是模板化的,所以任何種類的類都可以是它的類型,而不僅僅是Bar或Matrix2x2,如下例所示。
我現在不是在這裏關鍵詞來查看它在互聯網上,如果可能的話。
謝謝!
template <class T>
class ObjectPool
{
vector<T> mObjects;
ObjectPool() : mObjects(size)
{
}
//that's what i could come up with to add an object to the object pool
void add_old_way(const T& object)
{
...
mObjects[nextFreeIndex] = object;
...
}
//desired way of adding object
void add_new_way(...)
{
mObjects[nextFreeIndex].param1 = param1;
mObjects[nextFreeIndex].param2 = param2;
...
mObjects[nextFreeIndex].paramN = paramN;
}
};
class Bar
{
Bar(int x, string s)
{
mX = x;
mS = s;
}
int mX;
string mS;
};
int main()
{
ObjectPool<Bar> v;
ObjectPool<Matrix2x2> v;
//that's what i could come up with
v.add_old_way(cBar(1,"asdf"));
v.add_old_way(cMatrix2x2(1,2,3,4));
//desired way of adding object
v.add_new_way(1,"asdf");
v.add_new_way(1,2,3,4);
}
你想這個表現得像''從的std :: VECTOR' emplace_back'? – Justin
@Justin我剛纔查了一下,並沒有意識到這一點。是的,類似的東西,甚至查看源代碼,但不知道如何處理這些任意數量的參數並單獨分配。 – Avithohol
OT:如果向量的大小是固定的,那麼'std :: array'怎麼樣? – max66