У меня есть класс MemoryPool со следующим (сокращенным до релевантного) кодом:
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)
не удалось вывести аргумент шаблона для 'T'.
Мой класс AbstractFactory также является классом шаблона, я определил_factory как частный составной объект MemoryPool с типом T. Мне бы хотелось, чтобы всякий раз, когда я создавал экземпляр объекта MemoryPool с типом, скажем, MemoryPool целых чисел, он инициализировал составной _factory с типом int.Есть ли способ сделать это?
Редактировать: вот метод CreateItem, в зачаточном состоянии:
template <typename T>
inline const std::shared_ptr<T> CreateItem()
{
return std::shared_ptr<T>(new T);
}