Tôi có một lớpCó thể lấy loại giá trị từ một trình lặp vòng tùy ý (C++) không?
template <typename Iterator, typename Value>
class Foo {
public:
Foo(const Iterator& it) { ... }
...
private:
map<Value, int> m_;
}
};
Có cách nào để thoát khỏi giá trị trong mẫu không? Iterator có thể hoặc không thể là một trình lặp STL, nhưng nó được đảm bảo rằng * nó là Giá trị.
Tôi biết về iterator_traits<T>::value_type
cho trình lặp STL, nhưng tự hỏi liệu có cách nào để tự động nhận loại Giá trị cho loại Iterator tùy ý không?
Một trick Tôi đang suy nghĩ về - nói rằng, chúng tôi có một lớp helper
template <typename Iterator, typename Value>
class Bar {
public:
Bar(const Iterator& dummy_iterator, const Value& dummmy_value) {}
...
};
Sau đó, nếu chúng ta nhanh chóng Bar như Bar (nó, * nó), loại giá trị gia tăng sẽ được biết đến trong Bar. Nhưng tôi không thể tìm ra cách tốt để kết hợp Bar với Foo.
Cảm ơn, tham chiếu đến tiêu chuẩn ISO C++ rất hữu ích. –