gpt4 book ai didi

c++ - 如何指定 C++ 类的特定方法使用模板?

转载 作者:太空狗 更新时间:2023-10-29 23:19:09 24 4
gpt4 key购买 nike

我在使用 C++ 模板时遇到问题。这是我尝试做的事情的解释,以便每个人都可以更好地理解我的问题。

我的框架有一个基类,Component ,我的框架的用户将派生 Component创造混凝土 Components例如 TransformComponentAudioComponent . ComponentComposite存储所有具体的列表Component是给定用户创建的。

我正在尝试存储具体的列表 Components通过boost::anyboost::any_cast

下面是ComponentComposite中的两个方法和我的 boost::any list .

    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 s 到 GameObject ,然后我试图访问两个 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>();
}

这样做会抛出四个错误(每个函数调用一个):

  1. ...undefined reference to `bool BalaurEngine::Composites::ComponentComposite::addComponent<BalaurEngine::Components::AudioComponent>(BalaurEngine::Components::AudioComponent*)'
  2. ...undefined reference to `bool BalaurEngine::Composites::ComponentComposite::addComponent<BalaurEngine::Components::TransformComponent>(BalaurEngine::Components::TransformComponent*)'
  3. ...undefined reference to `BalaurEngine::Components::TransformComponent* BalaurEngine::Composites::ComponentComposite::getComponent<BalaurEngine::Components::TransformComponent>()'
  4. ...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();

最佳答案

现在已经回答了 - 请参阅最后一条评论:

@Mutmansky,我不知道在 C++ 中实现的模板化函数需要与模板化函数的定义一起位于 header 中。在我按照 Scott Langham 的建议这样做之后,编译器错误就消失了。如果您想查看该文件的源代码,我很乐意将其张贴在这里/发消息给您。让我知道!

关于c++ - 如何指定 C++ 类的特定方法使用模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10462830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com