Làm thế nào để xóa loại từ các trình vòng lặp đầu ra là std::insert_iterator
và std::back_insert_iterator
? Có thể sử dụng boost any_iterator
để làm như vậy không?Trình lặp đầu ra loại C++ bị xóa loại
#include <boost/range.hpp>
#include <boost/range/detail/any_iterator.hpp>
#include <vector>
typedef boost::range_detail::any_iterator<
int, boost::incrementable_traversal_tag, int &, std::ptrdiff_t > It;
int main()
{
std::vector<int> v;
It outIt(v.begin()); // compiles
It inserter(std::back_inserter(v)); // does not compile
return 0;
}
Bạn có ý nghĩa gì với "loại xóa"? –
@EitanT: Bạn nên tìm kiếm "C++ type erasure", nhưng đối với một định nghĩa ngắn "quá trình chuyển nhiều loại khác nhau với một giao diện chung thành một loại với cùng giao diện đó". Boost :: Any sẽ là ví dụ kinh điển. –
@ JesseGood Aaa Tôi biết đó là gì, tôi không bao giờ biết nó được gọi là "loại tẩy xoá". Doh! –