【发布时间】:2011-10-31 10:55:23
【问题描述】:
我有一个类 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 定义为类型为 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 吃了类型参数,我解决了这个问题。
-
基本上我希望能够用一个类型实例化一个 MemoryPool,比如该类型是 int、char 等等。然后将实例化相同类型的复合 AbstractFactory,即 _factory。
标签: c++ templates object composite