template <class T>
class Node {
private:
T m_value;
//Node* m_ptr; //(1)
//Node<T>* m_ptr; //(2)
};
谁能解释一下上面两种说法(1)和(2)的区别是什么?这两个语句似乎都可以编译,但我似乎无法找到 ISO C++ 对它们的说明。
最佳答案
它们是同一件事,因为您在模板中声明了指针,因此当您创建 Node
的实例时,编译器知道 T
是什么。如果可以推导出模板,则不必指定模板的类型,例如来自参数类型,或者在本例中来自指针所属的模板实例。
template <class T>
class Node {
public:
T m_value;
Node* m_ptr; //(1)
//Node<T>* m_ptr; //(2)
};
int main()
{
Node<float> test;
test.m_ptr = new Node<float>{}; // valid
test.m_ptr = new Node<bool>{}; // invalid - triggers compiler error
auto val = test.m_ptr->m_value; // val will be of float type
}
关于c++ - 将类型参数传递给自引用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707445/