C++ GCC共享\u ptr模板错误
以下函数C++ GCC共享\u ptr模板错误,c++,templates,g++,shared-ptr,C++,Templates,G++,Shared Ptr,以下函数 #include <memory> template<typename T> std::shared_ptr<typename T> Tail(const std::shared_ptr<typename T>& cont, size_t n) { const auto size(std::min<size_t>(n, cont->size())); return std::shared_ptr&l
#include <memory>
template<typename T>
std::shared_ptr<typename T> Tail(const std::shared_ptr<typename T>& cont, size_t n)
{
const auto size(std::min<size_t>(n, cont->size()));
return std::shared_ptr<typename T>(new T(cont->end() - size, cont->end()));
}
我知道cont“看起来”不像指针,但它在VS2012上编译得很好。
如何为gcc编写函数?只需删除那些额外的
typename
s即可
template<typename T>
std::shared_ptr<T> Tail(const std::shared_ptr< T>& cont, size_t n)
{
const auto size(std::min<size_t>(n, cont->size()));
return std::shared_ptr< T>(new T(cont->end() - size, cont->end()));
}
模板
std::shared_ptr Tail(常数std::shared_ptr&cont,大小)
{
常量自动大小(std::min(n,cont->size());
返回std::shared_ptr(新的T(cont->end()-size,cont->end());
}
您过度使用了typename
关键字。代码应如下所示:
template<typename T>
std::shared_ptr<T> Tail(const std::shared_ptr<T>& cont, size_t n)
{
const auto size(std::min<size_t>(n, cont->size()));
return std::shared_ptr<T>(new T(cont->end() - size, cont->end()));
}
模板
std::shared_ptr Tail(常数std::shared_ptr&cont,大小)
{
常量自动大小(std::min(n,cont->size());
返回std::shared_ptr(新的T(cont->end()-size,cont->end());
}
有关进一步的讨论,请参见您不必在每次使用参数之前重写
typename
,因此请将其更改为:
template<typename T>
std::shared_ptr<typename T> Tail(const std::shared_ptr<T>& cont, size_t n)
{
const auto size(std::min<size_t>(n, cont->size()));
return std::shared_ptr<typename T>(new T(cont->end() - size, cont->end()));
}
模板
std::shared_ptr Tail(常数std::shared_ptr&cont,大小)
{
常量自动大小(std::min(n,cont->size());
返回std::shared_ptr(新的T(cont->end()-size,cont->end());
}
这与类的问题是一样的,你不需要编写
void myfunc(class MyClass&m){}
,而只需编写void myfunc(class MyClass&m){}
谢谢你的回答,为什么?你根本不需要它们
template<typename T>
std::shared_ptr<typename T> Tail(const std::shared_ptr<T>& cont, size_t n)
{
const auto size(std::min<size_t>(n, cont->size()));
return std::shared_ptr<typename T>(new T(cont->end() - size, cont->end()));
}