gpt4 book ai didi

c++ - 使用模板时什么时候应该使用关键字 "typename"

转载 作者:太空狗 更新时间:2023-10-29 19:50:04 28 4
gpt4 key购买 nike

我最近一直在做一个小项目,但我想不出一些东西..

我得到了一个 .h 文件,其中包含一个使用类型名模板的类。在那个类(class)里面有一个私有(private)类(class)。

template <typename T>
class Something
{
public:
Something();
~Something();

Node* Function1(int index);
int Index(const T& id);


private:
class Node()
{
public:
T id;

//Imagine the rest for the Node


};
};

当我想定义“Something”类的函数时出现问题

这是我的做法(在 .inl 文件中)

template<typename T>
Node* Something::Function1(int index) //Is the return type well written?
{
// returns the node at the specified index
}

template<typename T>
int Something::Index(const T& id) //Is the parameter type well specified?
{
// returns the index of the node with the specified id
}

所以窃听部分在定义部分......我是否必须告诉编译器返回类型(在本例中为 Node*)使用类型名模板(如下所示:typename Node*)?那参数呢? typename 常量节点& ?

所以基本上,我什么时候必须指定函数/参数是否使用模板?

感谢您的宝贵时间。

最佳答案

对于 Function1 ,您需要告诉编译器 Node 是什么——在本例中,它是 Something<T> 中的嵌套类型.因为它依赖于 T (它是一个从属名称),你需要告诉编译器它是一个类型,所以你必须把它写成 typename Something<T>::Node .问题是可能有一些 T为此 Something<T>::Node实际上不是一种类型(即,如果您部分专门化了 Something<T> )。

对于 Index ,你所拥有的很好——const T&只是对 const T 的引用,编译器知道什么 T是。

关于c++ - 使用模板时什么时候应该使用关键字 "typename",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227833/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com