c++ - 将类型参数传递给自引用指针

标签 c++ class templates definition

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/

相关文章:

c++ - 带时间延迟的简单输入输出

c++ - 基本深拷贝(操作重载)

javascript - 如何获取对象的实例名称

c++ - 将元素插入来自不同类的 vector 中

c++ - 通过模板编译时父子关系

c# - C++ 等效于 C# Yield?

c++ - 实现自定义 Postgres 索引作为扩展

javascript - 试图从数组中检索对象的颜色

c++ - 什么是在 c++ 中获取按值排序的列表中元素的序号位置的算法或代码

c++ - 如何使类模板参数可选?