This question already has answers here:
Difference of keywords 'typename' and 'class' in templates?
                                
                                    (5个答案)
                                
                        
                                去年关闭。
            
                    
在我的程序中使用template <typename p>时,它没有给出任何编译错误,但是当我传递两个不同类型的向量时,我使用template <class p>却给出了错误。

template <class p>

getvector(std::vector<p>&vec)
{
// my operation
}


这是将接收向量的函数,我正在使用template <typename p>它没有给出编译错误。任何机构都可以解释与template <typename p >不同的原因

最佳答案

函数template declaration中的typenameclass之间没有区别。声明模板参数时,它们的含义相同。您的函数需要一个返回类型:

template <class p>
std::vector<p> getvector(std::vector<p> &vec)
{
    // your code
    return vec;
}


与以下内容相同:

template <typename p>
std::vector<p> getvector(std::vector<p> &vec)
{
    // your code
    return vec;
}


如果您不想返回一个简单的void函数,将是:

template <typename p> // or template <class p>
void getvector(std::vector<p> &vec)
{
    std::cout << vec[0]; // your code here
}

关于c++ - 模板<typename p>没有给出错误,但是模板<class p>却给出了错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48397790/

10-13 08:12