我有一个非模板类,其模板成员函数与下面类似。
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;
}
为什么这不起作用的任何想法?
答案 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;之一。