【发布时间】:2009-07-10 00:36:44
【问题描述】:
我有课
template <typename Iterator, typename Value>
class Foo {
public:
Foo(const Iterator& it) { ... }
...
private:
map<Value, int> m_;
}
};
有什么办法可以去掉模板中的 Value 吗? Iterator 可能是也可能不是 STL 迭代器,但保证 *it 类型是 Value。
我知道用于 STL 迭代器的 iterator_traits<T>::value_type,但想知道是否有任何方法可以为任意迭代器类型自动获取值类型?
我正在考虑的一个技巧 - 比如说,我们有一个辅助类
template <typename Iterator, typename Value>
class Bar {
public:
Bar(const Iterator& dummy_iterator, const Value& dummmy_value) {}
...
};
那么如果我们将 Bar 实例化为 Bar(it, *it),那么在 Bar 内部就会知道 Value 的类型。但是我找不到将 Bar 与 Foo 结合起来的好方法。
【问题讨论】: