diff --git a/printtest.cpp b/printtest.cpp new file mode 100644 index 0000000..117eca4 --- /dev/null +++ b/printtest.cpp @@ -0,0 +1,50 @@ +#include + +struct Class +{ + int a = 300; +}; + +std::ostream &operator << (std::ostream &out, Class c) +{ + out << c.a; + return out; +} + +int Print(char const *fmt) +{ + int ret = 0; + + for(auto p = fmt; *p; p++, ret++) + std::cout.put(*p); + + std::cout.put('\n'); + + return ret; +} + +template +int Print(char const *fmt, T &&head, Args &&...tail) +{ + int ret = 0; + + for(auto p = fmt; *p; p++, ret++) + { + if(p[0] == '{') + switch(p[1]) + { + case '}': std::cout << head; return ret + Print(p + 2, tail...); + case '{': p++; break; + } + + std::cout.put(*p); + } + + return -1; // won't happen +} + +int main() +{ + Class c; + Print("a{}b{{}c{d{}e{}f", 91230, c); +} diff --git a/virtoper.cpp b/virtoper.cpp new file mode 100644 index 0000000..cce0a92 --- /dev/null +++ b/virtoper.cpp @@ -0,0 +1,27 @@ +#include + +class A +{ +public: + virtual int operator + (int rhs) {return rhs;} +}; + +class B : public A +{ +public: + int operator + (int) override {return 999;} +}; + +void print(A &a) +{ + std::cout << a + 5 << std::endl; +} + +int main() +{ + A a; + B b; + + print(a); + print(b); +}