【发布时间】:2012-05-05 16:30:58
【问题描述】:
我正在编写一个类似 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>();
我的第一个问题是,ConstIterator begin() const 实际上是什么类型名?
其次,有没有办法让这个元编程在课堂之外是透明的?即我仍然可以使用以下代码调用 begin() 就好像它是以标准方式编写的一样?
C foo;
const C foo2;
Iterator it = foo.begin();
ConstIterator it = foo2.begin();
【问题讨论】:
-
为什么要在 begin 方法中使用 2 个模板参数?
-
@fontanini hmm 因为我不确定 ConstIterator begin() const 有什么类型名,所以对于 const 情况,itr0 和 itr1 是否相同。
标签: c++ templates iterator metaprogramming containers