すべての Init() 関数を回避し、代わりに各コンポーネント コンストラクターを使用するために、可変個引数テンプレートを使用するようにコンポーネント プール ジェネレーターを変更しようとしています。しかし、私はそれをコンパイルすることができません。
これはコンポーネント プール クラスです。基本クラスがあり、そのメソッドは親クラスによってオーバーライドされます。
class iComponentPool
{
public:
virtual iComponent* Create(EntityId entityId) = 0;
virtual iComponent* Get(EntityId entityId) = 0;
virtual void Destroy(EntityId entityId) = 0;
};
template<typename T>
class componentIterator
{
public:
typename std::vector<T>::iterator beginIT;
typename std::vector<T>::iterator endIT;
};
template<typename T, typename ... Targs>
class componentPool : public iComponentPool, public componentIterator<T>
{
public:
T* Create(EntityId entityID, Targs... Args) override
{
};
T* Get(EntityId entityId) override
{
return nullptr;
};
void Destroy(EntityId entityId) override
{
};
};
ただし、コンパイラは、componentPool Create メソッドが基本クラスのメソッドをオーバーライドしていないと文句を言います (当然のことです)。この問題を回避する方法はありますか?
実際のエラー (VS 2015) は次のとおりです。
'ECS::componentPool<T,statics::staticAsset *&>::Create':
method with override specifier 'override' did not override any base class methods