我上课了
template <typename Iterator, typename Value>
class Foo {
public:
Foo(const Iterator& it) { ... }
...
private:
map<Value, int> m_;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱模板中的价值?迭代器可能是也可能不是STL迭代器,但它保证*它的类型是Value.
我知道iterator_traits<T>::value_typeSTL迭代器,但想知道是否有任何方法可以自动为任意Iterator类型获取Value类型?
我正在考虑的一个技巧 - 比方说,我们有一个助手类
template <typename Iterator, typename Value>
class Bar {
public:
Bar(const Iterator& dummy_iterator, const Value& dummmy_value) {}
...
};
Run Code Online (Sandbox Code Playgroud)
然后,如果我们将Bar实例化为Bar(它,*it),则在Bar中将知道Value的类型.但我找不到将Bar与Foo结合起来的好方法.
Pav*_*aev 18
任何迭代器都应该提供iterator_traits<Iterator>::value_type.如果没有,则它不是迭代器.ISO C++ 2003 24.3.1 [lib.iterator.traits]"迭代器特征":
要仅根据迭代器实现算法,通常需要确定与特定迭代器类型对应的值和差异类型.因此,需要if
Iterator是迭代器的类型,类型Run Code Online (Sandbox Code Playgroud)iterator_traits<Iterator>::difference_type iterator_traits<Iterator>::value_type iterator_traits<Iterator>::iterator_category被定义为迭代器的差异类型,值类型和迭代器类别.
除此之外,没有通用的方法来获得任意类型的C++表达式.C++ 0x将通过提供来纠正它decltype.
| 归档时间: |
|
| 查看次数: |
3763 次 |
| 最近记录: |