我正在编写一个类似 stl 的容器类,它具有以下功能:
Iterator begin(){
return Iterator(data_.begin(), 1);
}
ConstIterator begin() const{
return ConstIterator(data_.begin(), 1);
}
我想我可以用一个函数来替换两者:
template <typename itr0, typename itr1>
itr0 begin(){
return itr1(data_.begin(), 1);
}
当我调用以下代码时,代码是在编译时生成的:
Iterator it = foo.begin<Iterator, Iterator>();
ConstIterator it = foo.begin<ConstIterator const?, ConstIterator>();
我的第一个问题是, typename 实际上是什么ConstIterator begin() const
?
其次,有没有办法让这个元编程在课堂之外是透明的?即我仍然可以使用以下代码来调用 begin() 就好像它是以标准方式编写的一样?
C foo;
const C foo2;
Iterator it = foo.begin();
ConstIterator it = foo2.begin();