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
}
};
Но призоваването на същия метод работи от друго място! като основен (). Какво не е наред с този код!
Отговори:
1 за отговор № 1Кодът, който сте предоставили, има грешки, както вече споменахме. След като ги фиксирате, ще получите грешката, която споменахте.
Причината да го получите е, че имате членна функция с име Transform
, същото като типа, който искате да конкретизирате GetComponent
за. Така че, решението е да "помага" на компилатора, като използва пълно име на тип, включително пространство на имена. Това предполага това Transform
се дефинира в глобално пространство на имена:
Transform* Transform() {
return this->GetComponent<::Transform>();
}
Използвайте това, ако сте го определили в имена:
Transform* Transform() {
return this->GetComponent<::YOUR_NAMESPACE::Transform>();
}
EDIT: пълният код, който използвах:
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>();
}
};