模板成员函数继承

时间:2014-10-26 17:32:47

标签: c++ function templates member

我有一个非模板类,其模板成员函数与下面类似。

class Component
{
public:
static const int HASH_ID = 0;
virtual int HashID() const {return Component::HASH_ID;}
virtual bool is(int hash_id) const {return Component::HASH_ID == hash_id;}
template<typename T> bool is() const {return this->is(T::HASH_ID);}
};

class Transform : public Component
{
 public:
 static const int HASH_ID = 1;
 virtual int HashID() const {return Transform::HASH_ID;}
 virtual bool is(int hash_id) const {return Transform::HASH_ID == hash_id;}
};

我的问题是Transform类不会让我调用模板函数。

这是我编写的无法编译的测试代码

int main(void)
{
  Transform test_component;
  Transform* transform = &test_component;
  Component* component = &test_component;

  std::cout << component->is<Transform>() << std::endl; //No issues

  //Won't compile unless I comment out this line
  std::cout << transform->is<Transform>() << std::endl; //Says I am missing argument list

  std::cout << transform->is(Transform::HASH_ID) << std::endl; //Works Fine!
  return 0;
}

为什么这不起作用的任何想法?

1 个答案:

答案 0 :(得分:3)

virtual bool is(int hash_id) const {return Transform::HASH_ID == hash_id;}

正在隐藏

template<typename T> bool is() const {return this->is(T::HASH_ID);}

如果派生类声明的方法与基类定义的方法同名,则派生类&#39;方法隐藏基类&#39;之一。