私はこれらのオブジェクトを "MyGroup
"と呼びます。 MyGroup
サブクラスBaseGroup
。リアルタイムシステムであるため、動的メモリ割り当ての贅沢さはありません。そのため、特定の種類のオブジェクトを一定数割り当てるオブジェクトObjectPool
があります。この場合、私は10 MyGroup
オブジェクトが割り当てられていると言います。"テンプレートベースの識別子Xを解決できません" - テンプレートクラス(C++)からテンプレートパラメータクラスのメソッドを呼び出します
今、これらのグループをKey-Valueマップに保存します。そこで私はFiniteMap
テンプレートクラスを作成して、指定されたタイプのオブジェクトを格納できる、指定されたサイズのジェネリックマップを作成しました。
マイGroupList
クラスのサブクラスFiniteMap
、私は私が私のGroupListをして保存したいBaseGroup
のどのサブクラスかわからないので、まだ、パラメータ<G, S>
できます。
BaseGroup::createGroup()
のメソッドは純粋な仮想ですので、MyGroup
に実装されています。
そう - 問題は、// ***
でマークされた行に、私は、コンパイル、次の2つのいずれかを取得していている:いずれかの警告:Unable to resolve template based identifier createGroup
、または私は実際にgetOrCreateGroup()
方法、エラー呼び出す場合:cannot call member function 'virtual MyGroup* MyGroup::createGroup(unsigned int) without object
を。
GroupListをオブジェクトがメインロジックでインスタンス化されています
GroupList<MyGroup, 10> myGroupList;
任意のアイデア?
私はこれらのテンプレートクラスを持っている:
template <class T, unsigned int S>
class FiniteMap
{
// class to implement an array of these types of structures.
// Contains methods for put, remove, get, etc.
struct Entry
{
int key;
T* pObject;
bool inUse;
Entry() : key(0), pObject(NULL), inUse(false) {}
}
}
template <class G, unsigned int S>
class GroupList : public FiniteMap<G, S>
{
// ...
G* getOrCreateGroup(unsigned int groupNumber)
{
G* pGroup = this->get(groupNumber);
if (pGroup == NULL)
{
pGroup = G::createGroup(groupNumber); // ***
if (pGroup == NULL)
{
// handle error
}
}
return pGroup;
}
}
class BaseGroup
{
public:
virtual BaseGroup* createGroup(unsigned int groupNumber) = 0;
protected:
unsigned int _groupNumber;
}
class MyGroup : BaseGroup
{
public:
virtual MyGroup* createGroup(unsigned int groupNumber)
{
MyGroup* g = MyGroupPool.New(); // Object pool allocation
if (g == NULL)
{
// handle error
}
else
{
g->_groupNumber = groupNumber;
}
return g;
}
}
ありがとうございました。 – livefree75
'GroupList'クラス定義を次のように変更して部分的に修正しました: ' template class GroupList:public FiniteMap '、' G'を 'BaseGroup'に変更'GroupList'。 しかし、私は、オブジェクトなしで 'createGroup() 'を呼び出すことができなくなってきています。しかし、 'getOrCreateGroup'で作成したい' BaseGroup'のサブクラスは分かりません。 –
livefree75