C++テンプレートに問題があります。これが私がやろうとしていることの説明です。そうすれば、誰もが私の問題をよりよく理解できるようになります。
私のフレームワークには基本クラスがあり、私のフレームワークのユーザーはとなどの具象を作成するためComponent
に派生します。Aは、特定のユーザーが作成したすべての具象のリストを格納します。Component
Components
TransformComponent
AudioComponent
ComponentComposite
Component
とsComponents
を介してコンクリートのリストを保存しようとしています。boost::any
boost::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();