Я пытаюсь получить доступ к базовому std::ifstream
, добавленному в boost::iostreams::filtering_streambuf
цепочку.Согласно FAQ , один из способов сделать это - использовать component/component_type
.Почему код ниже не работает?
std::ifstream fp{"input.txt", std::ios_base::in | std::ios_base::binary};
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
in.push(boost::iostreams::counter{});
in.push(fp);
auto *c = in.component<boost::iostreams::counter>(0); // works
std::cout << (c == nullptr) << std::endl; // 0
std::cout << c->characters() << std::endl;
std::cout << c->lines() << std::endl;
// Look into ifstream
auto *f_ptr = in.component<std::ifstream>(1); // fails
std::cout << (f_ptr == nullptr) << std::endl; // 1
Запуск на Coliru