#define OUT_TO_STREAM(classType) \ template<class ostream>friend \ ostream& operator<<(ostream& os, const classType& obj )struct some{ OUT_TO_STREAM(some) { return os << "sample\n"; }};std::any a(some); // подобное на практике нужно сплошь и рядом// попробуйте реализовать без шаблоно-виртуалаstd::cout << a << std::endl; someOut << a << std::endl; std::any a(some1); std::any b(some2); a + b; // автоматический вывод шаблоно типов: some1 + some2
C++ (Qt)class SomeConcreteClass : public ISomeClass{ void doSomething(Widget *value) override { std::cout << "SomeConcreteClass value = " << value << std::endl; }}