我在使用 C++ 模板时遇到问题。这是对我正在尝试做的事情的解释,以便每个人都可以更好地理解我的问题。
我的框架有一个基类 ,Component
并且我的框架的用户将派生Component
以创建具体Components
的TransformComponent
和AudioComponent
。AComponentComposite
存储给定用户创建的所有具体s 的列表。 Component
我正在尝试存储具体Components
viaboost::any
和boost::any_cast
s 的列表。
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;
}
这是 a 的示例代码GameObject
,它是 a ComponentComposite
。我正在尝试将两个Component
s 添加到GameObject
,然后我尝试访问Component
添加的两个 s。这样做将是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>();
}
这样做会引发四个错误(每个函数调用一个错误):
...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();