aboutsummaryrefslogtreecommitdiff
path: root/channels/channels.cpp
blob: 8d4b6cd5b64fe21a390aea99e0d34cb00974f22f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <string>
#include <any>

class channel {
private:
    std::any val;
public:
    void operator<<(auto & v) {
        val = v;
    }
    void operator>>(auto & v) {
        while (!val.has_value());
        v = std::any_cast<decltype(v)>(val);
        val.reset();
    }
};

int main() {
    channel c;
    int x = 1;
    c << x;
    std::string y = "Hello world";
    c >> x;
    c << y;
    std::cout << x << std::endl;
    c >> y;
    std::cout << y << std::endl;
}