C ++在类本身的非模板类中调用模板方法

时间:2013-01-25 14:04:24

标签: c++ templates

class Node {
public:
  template<class T>  T*   GetComponent() {
     return new T(this);  // actual code is more complicated!
  }

  Transform*   Transform() {
      return this->GetComponent<Transform>();   // invalid template argument for 'T', type expected
  }
};

但是调用同样的方法可以从另一个地方运行!喜欢main()。 这段代码有什么问题!!!

1 个答案:

答案 0 :(得分:1)

您提供的代码存在拼写错误,正如已经提到过的那样。修复它们后,您将收到您提到的错误。

你得到它的原因是你有一个名为Transform的成员函数,与你要为GetComponent建议的类型相同。所以,解决方案是帮助&#34; complier使用完整类型名称,包括名称空间。这假定Transform在全局命名空间中定义:

Transform*   Transform() {
    return this->GetComponent<::Transform>();
}

如果您已在命名空间中定义它,请使用此选项:

Transform*   Transform() {
    return this->GetComponent<::YOUR_NAMESPACE::Transform>();
}

编辑:我使用的完整代码:

class Node;
class Transform
{
public:
    Transform(Node*);
};

class Node {
public:
    template <class T>  
    T*   GetComponent() {
        return new T(this);
    }

    Transform*   Transform() {
        return this->GetComponent<::Transform>();
    }
};