C++テンプレートに問題があります。これが私がやろうとしていることの説明です。そうすれば、誰もが私の問題をよりよく理解できるようになります。
私のフレームワークには基本クラスがあり、私のフレームワークのユーザーはとなどの具象を作成するためComponentに派生します。Aは、特定のユーザーが作成したすべての具象のリストを格納します。ComponentComponentsTransformComponentAudioComponentComponentComposite Component
とsComponentsを介してコンクリートのリストを保存しようとしています。boost::anyboost::any_cast
以下はの2つの方法ComponentCompositeと私のリストですboost::any。
class ComponentComposite {
public:
ComponentComposite();
template<class T> bool addComponent(T* component);
template<class T> T* getComponent();
private:
QList<boost::any*>* m_components;
}
これは、のサンプルコードGameObjectですComponentComposite。Componentに2つのを追加しよGameObjectうとしています。次に、追加された2つのにアクセスしようとしてComponentいます。そのようなことを行うことは、の一般的なユースケースになりComponentCompositeます。
GameObject::GameObject() : ComponentComposite()
{
addComponent<Components::AudioComponent>(new Components::AudioComponent());
addComponent<Components::TransformComponent>(new Components::TransformComponent());
Components::TransformComponent* transform= getComponent<Components::TransformComponent>();
Components::AudioComponent* audio= getComponent<Components::AudioComponent>();
}
これを行うと、4つのエラー(関数呼び出しごとに1つ)がスローされます。
...undefined reference to `bool BalaurEngine::Composites::ComponentComposite::addComponent<BalaurEngine::Components::AudioComponent>(BalaurEngine::Components::AudioComponent*)'...undefined reference to `bool BalaurEngine::Composites::ComponentComposite::addComponent<BalaurEngine::Components::TransformComponent>(BalaurEngine::Components::TransformComponent*)'...undefined reference to `BalaurEngine::Components::TransformComponent* BalaurEngine::Composites::ComponentComposite::getComponent<BalaurEngine::Components::TransformComponent>()'...undefined reference to `BalaurEngine::Components::AudioComponent* BalaurEngine::Composites::ComponentComposite::getComponent<BalaurEngine::Components::AudioComponent>()'
誰かが望むなら、私は私のメソッドのソースコードを投稿することができtemplate<class T> bool addComponent(T* component);ますtemplate<class T> T* getComponent();