Хочется примерно следующего:
struct IFooBar {
virtual void func() = 0;
};
typedef boost::any_range<IFooBar,
boost::random_access_traversal_tag,
const IFooBar&,
std::ptrdiff_t> FooBarRange;
void func( const FooBarRange& range ) {
}
int main() {
std::vector<std::unique_ptr<IFooBar>> vec;
func( vec | boost::adaptors::indirected );
return 0;
}
Но всё это дело не компилируется из-за того, что IFooBar — абстрактный класс. Как бы поправить? Единственное, что пока приходит в голову — завернуть все в boost::reference_wrapper, но получается как-то не слишком эстетично