#include <iostream>
#include <stdint.h>
#include <thread>
#include <list>
class ReaderA
{
public:
ReaderA() {}
~ReaderA() {}
template <typename T>
void read(std::list<T> *stack) = 0;
};
class Reader : public ReaderA
{
public:
Reader() {}
~Reader() {}
template <typename T>
void read(std::list<T> *stack)
{
std::cout << "i'm supposed to read";
stack.push_back(1); //lets push some data
}
};
class Caller
{
public:
Caller(ReaderA *reader) : _reader(reader)
{
}
~Caller() {}
template <typename T>
void call(std::list<T> *stack)
{
std::thread *thread = new std::thread(
static_cast<void (ReaderA::*)(std::list<T> *)>(&ReaderA::read),
_reader, stack);
}
protected:
ReaderA *_reader;
};
int main()
{
Reader *r = new Reader();
Caller *c = new Caller(r);
std::list<uint32_t> *list = new std::list<uint32_t>();
c->call(list);
return (0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDx0aHJlYWQ+CiNpbmNsdWRlIDxsaXN0PgoKY2xhc3MgUmVhZGVyQQp7CnB1YmxpYzoKICAgIFJlYWRlckEoKSB7fQogICAgflJlYWRlckEoKSB7fQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgdm9pZCByZWFkKHN0ZDo6bGlzdDxUPiAqc3RhY2spID0gMDsKCn07CgpjbGFzcyBSZWFkZXIgOiBwdWJsaWMgUmVhZGVyQQp7CnB1YmxpYzoKICAgIFJlYWRlcigpIHt9CiAgICB+UmVhZGVyKCkge30KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIHZvaWQgcmVhZChzdGQ6Omxpc3Q8VD4gKnN0YWNrKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiaSdtIHN1cHBvc2VkIHRvIHJlYWQiOwogICAgICAgIHN0YWNrLnB1c2hfYmFjaygxKTsgLy9sZXRzIHB1c2ggc29tZSBkYXRhCiAgICB9Cgp9OwoKY2xhc3MgQ2FsbGVyCnsKcHVibGljOgogICAgQ2FsbGVyKFJlYWRlckEgKnJlYWRlcikgOiBfcmVhZGVyKHJlYWRlcikKICAgIHsKCiAgICB9CgogICAgfkNhbGxlcigpIHt9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICB2b2lkIGNhbGwoc3RkOjpsaXN0PFQ+ICpzdGFjaykKICAgIHsKICAgICAgICBzdGQ6OnRocmVhZCAqdGhyZWFkID0gbmV3IHN0ZDo6dGhyZWFkKAogICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQgKFJlYWRlckE6OiopKHN0ZDo6bGlzdDxUPiAqKT4oJlJlYWRlckE6OnJlYWQpLAogICAgICAgICAgICAgICAgICAgIF9yZWFkZXIsIHN0YWNrKTsKICAgIH0KCnByb3RlY3RlZDoKICAgIFJlYWRlckEgKl9yZWFkZXI7Cn07CgppbnQgbWFpbigpCnsKICAgIFJlYWRlciAqciA9IG5ldyBSZWFkZXIoKTsKICAgIENhbGxlciAqYyA9IG5ldyBDYWxsZXIocik7CiAgICBzdGQ6Omxpc3Q8dWludDMyX3Q+ICpsaXN0ID0gbmV3IHN0ZDo6bGlzdDx1aW50MzJfdD4oKTsKICAgIAogICAgYy0+Y2FsbChsaXN0KTsKICAgIHJldHVybiAoMCk7Cn0K