我有一個類記憶池具有以下的(縮短到相關)碼包含對象的模板:C++使用相同類型T
namespace System
{
template <class T>
class MemoryPool
{
public:
// only constructor
MemoryPool(const size_t itemsToInitNow, const size_t maxItems)
: _maxItemsInMemoryPool(maxItems)
{
// initialize itemsToInitNow items immediately
for(size_t i = 0; i < itemsToInitNow; ++i) {
_container.push_back(MemoryItemSharedPointer(new MemoryItem<T>(_factory.CreateItem())));
}
}
.. other stuff
private:
.. other stuff
// private data members
AbstractFactory<T> _factory;
當我在我的代碼別處實例化對象的一個實例,如
new System::MemoryPool<ParticleShape>(10, 100);
我得到以下編譯錯誤:
System::AbstractFactory<T>::CreateItem(void)
could not deduce template argument for 'T'.
我AbstractFactory類也是一個臨時遲到的類,我將_factory定義爲類型爲T的MemoryPool的私有組合對象。我想這樣做,所以無論何時我使用類型(例如整數的MemoryPool)實例化MemoryPool對象時,它都會初始化類型爲int的複合_factory。
有沒有辦法做到這一點?
編輯:這裏是CreateItem方法,處於起步階段:
template <typename T>
inline const std::shared_ptr<T> CreateItem()
{
return std::shared_ptr<T>(new T);
}
我遵循你寫的大部分內容,但是讓我感到困惑:首先你說問題是編譯器抱怨,因爲你沒有指定模板參數T.這是真的。然後你說你想要關於類型和int的東西,我真的不明白。你能澄清一下你期待的System :: MemoryPool(10,100)嗎? –
@John,markdown吃了類型參數,我解決了這個問題。 – svick
基本上我想能夠用一個類型實例化一個MemoryPool,說這個類型是int,char,不管。然後會實例化一個相同類型的複合AbstractFactory,即_factory。 – Short