#include <iostream>
class IA
{
public:
virtual void start() = 0;
};
template <int i> class B : public IA
{
private:
static B* m_This;
public:
B()
{
m_This = this;
}
virtual void start()
{
std::cout << "start at instance: " << m_This << std::endl;
}
static void callback()
{
std::cout << "callback " << &callback << " at instance: " << m_This << std::endl;
return;
}
};
B<0>* B<0>::m_This;
B<1>* B<1>::m_This;
B<2>* B<2>::m_This;
B<3>* B<3>::m_This;
int main()
{
IA* k[4];
k[0] = new B<0>();
k[1] = new B<1>();
k[2] = new B<2>();
k[3] = new B<3>();
for( int x=0; x<4; x++)
k[x]->start();
// diese Aufrufe würden vom Treiber des Herstellers kommen
B<0>::callback();
B<1>::callback();
B<2>::callback();
B<3>::callback();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCmNsYXNzIElBCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOwp9OwogCnRlbXBsYXRlIDxpbnQgaT4gY2xhc3MgQiA6IHB1YmxpYyBJQQp7CiAKcHJpdmF0ZToKIAogICAgc3RhdGljIEIqIG1fVGhpczsKIApwdWJsaWM6CiAKICAgIEIoKQogICAgewogICAgICAgIG1fVGhpcyA9IHRoaXM7CiAgICB9CiAKICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJzdGFydCBhdCBpbnN0YW5jZTogIiA8PCBtX1RoaXMgPDwgc3RkOjplbmRsOwogICAgfQogCiAgICBzdGF0aWMgdm9pZCBjYWxsYmFjaygpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJjYWxsYmFjayAiIDw8ICZjYWxsYmFjayA8PCAiIGF0IGluc3RhbmNlOiAiIDw8IG1fVGhpcyA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQp9OwogCkI8MD4qIEI8MD46Om1fVGhpczsKQjwxPiogQjwxPjo6bV9UaGlzOwpCPDI+KiBCPDI+OjptX1RoaXM7CkI8Mz4qIEI8Mz46Om1fVGhpczsKIAppbnQgbWFpbigpCnsKICAgIElBKiBrWzRdOwogCiAgICBrWzBdID0gbmV3IEI8MD4oKTsKICAgIGtbMV0gPSBuZXcgQjwxPigpOwogICAga1syXSA9IG5ldyBCPDI+KCk7CiAgICBrWzNdID0gbmV3IEI8Mz4oKTsKIAogICAgZm9yKCBpbnQgeD0wOyB4PDQ7IHgrKykKICAgICAgICBrW3hdLT5zdGFydCgpOwogICAKICAgIC8vIGRpZXNlIEF1ZnJ1ZmUgd8O8cmRlbiB2b20gVHJlaWJlciBkZXMgSGVyc3RlbGxlcnMga29tbWVuCiAgICBCPDA+OjpjYWxsYmFjaygpOwogICAgQjwxPjo6Y2FsbGJhY2soKTsKICAgIEI8Mj46OmNhbGxiYWNrKCk7CiAgICBCPDM+OjpjYWxsYmFjaygpOwogCiAgICByZXR1cm4gMDsKfQ==
prog.cpp:35:5: error: specializing member 'B<0>::m_This' requires 'template<>' syntax
prog.cpp:36:5: error: specializing member 'B<1>::m_This' requires 'template<>' syntax
prog.cpp:37:5: error: specializing member 'B<2>::m_This' requires 'template<>' syntax
prog.cpp:38:5: error: specializing member 'B<3>::m_This' requires 'template<>' syntax