eml*_*lai 10 c++ templates template-specialization template-function c++11
我正在尝试专注std::begin于自定义容器.我这样做是因为我想使用基于范围for的容器.这就是我所拥有的:
class stackiterator { … };
class stack { … };
#include <iterator>
template <> stackiterator std::begin(stack& S)
{
return S.GetBottom();
}
Run Code Online (Sandbox Code Playgroud)
我在我的begin专业化定义中遇到以下错误:
没有函数模板匹配函数模板特化"开始"
我究竟做错了什么?
T.C*_*.C. 14
我正在尝试专注
std::begin于自定义容器.我这样做是因为我想使用基于范围for的容器.
你正在咆哮错误的树.基于范围for根本不使用std::begin.对于类类型,编译器查找成员begin和end直接,如果没有被发现,做一个ADL只查找自由begin和end在相关的命名空间.不执行普通的非限定查找; 有没有办法对std::begin被拾起如果你的类是不是在std命名空间.
即使你想要做的专业化也是可能的(除非你引入一个成员,否则begin()对函数模板的显式特化不能改变返回类型,并且有问题的重载返回"无论成员begin()返回什么";以及如果你介绍一个成员begin(),为什么你专门std::begin做它本来会做的事情?),你仍然无法使用基于范围的for.