使用模板的 C++ 方法定义

C++ Method definition with templates

我是全职 C++ 编程的新手,所以我试图更好地理解各种事物所涉及的细微差别。

我在一个小项目中使用模板,主要是在我学习的过程中编写代码,我遇到了一些我不太确定的事情。 Visual studio 帮助我生成了(在我的 .h 文件中的 .cpp 文件中)等同于此的代码:

template<class T>
PriorityQueue<T>::ClimbDownHeap(const int currentNodeIndex)
{
}

template<class T>
PriorityQueue<T>::GetRightNodeIndex(const int currentNodeIndex)
{
}

我的印象是这同样有效:

template <class T>
class PriorityQueue
{
public:   
    ClimbDownHeap(const int currentNodeIndex)
    {

    }
private:
    GetRightNodeIndex(const int currentNodeIndex)
    {
    }
};

我的理解可能有误,但至少到目前为止,两者似乎都能编译。这两种风格之间有什么显着差异吗?我更喜欢第二个,因为它对我来说更干净、更清晰。它们之间的细微差别是什么?

注意:在颠簸的火车上输入此内容,因此我对格式问题或代码不清晰表示歉意(我是根据我尝试过的记忆输入的;它不准确)。

如果您想使用来自其他文件的模板 class,您的模板代码必须放在 header 中。放入源文件有效地使其成为私有的(通过使链接不可能)。

正如 James 在评论中提到的,阅读详细的解释和示例 here