CD
Size: a a a
CD
АК
АР
АР
VK
АР
m
VK
АК
m
m
АК
any<
mpl::vector<
copy_constructible<>,
typeid_<>,
incrementable<>,
ostreamable<>
>
> x(10);
++x;
std::cout << x << std::endl; // prints 11
АР
m
m
any
в виде Box<dyn AnyTrait>
. У раста здесь есть преимущство в том, что можно реализовать свой трейт для чужого типа или чужой трейт для своего типа. Но это не будет работать, если и тип и трейт чужие.АК
void draw(std::ostream&) const
)struct any_drawable : te::poly<any_drawable> {пишем любой класс, который удовлетворяет этому интерфейсу:
using te::poly<any_drawable>::poly;
// интерфейс нашего any (на тело можно не смотреть)
void draw(std::ostream &out) const {
te::call([](auto const &self, auto &out) { self.draw(out); }, *this, out);
}
};
struct Circle { void draw(std::ostream& os) const { os << "circle"; } };
и всё:any_drawable foo = Circle{};
foo.draw(std::cout);
АК
m
void draw(std::ostream&) const
)struct any_drawable : te::poly<any_drawable> {пишем любой класс, который удовлетворяет этому интерфейсу:
using te::poly<any_drawable>::poly;
// интерфейс нашего any (на тело можно не смотреть)
void draw(std::ostream &out) const {
te::call([](auto const &self, auto &out) { self.draw(out); }, *this, out);
}
};
struct Circle { void draw(std::ostream& os) const { os << "circle"; } };
и всё:any_drawable foo = Circle{};
foo.draw(std::cout);
BOOST_TYPE_ERASURE_MEMBER(draw)
using any_drawable = any<
mpl::vector<
copy_constructible<>,
has_draw<void(std::ostream&)>
>
>;
any_drawable foo(Circle{});
foo.draw();
АК
BOOST_TYPE_ERASURE_MEMBER(draw)
using any_drawable = any<
mpl::vector<
copy_constructible<>,
has_draw<void(std::ostream&)>
>
>;
any_drawable foo(Circle{});
foo.draw();
foo.draw()
автокомплит не сойдёт с ума, если попытаться показать список членов объекта foo
?