#include <stdio.h>
#include <vector>
using namespace std;
struct Space2
{
struct Vector
{
};
};
struct Space3
{
struct Vector
{
};
};
template<typename Space>
struct ParticleSystem
{
struct ParticleData;
void DumpParticle() {}
std::vector<ParticleData> particles;
ParticleSystem()
{
particles.push_back(ParticleData());
}
};
template<> struct ParticleSystem<Space2>::ParticleData
{
float orientation;
float invInertia;
ParticleData()
{
orientation = 2.0f ;
invInertia = 3.0f;
}
};
template<> struct ParticleSystem<Space3>::ParticleData
{
float test;
ParticleData()
{
test = 100500.0f;
}
};
template<>
void ParticleSystem<Space2>::DumpParticle()
{
printf("2: %f %f\n", particles[0].orientation, particles[0].invInertia );
}
template<>
void ParticleSystem<Space3>::DumpParticle()
{
printf("3: %f\n", particles[0].test);
}
int main()
{
ParticleSystem<Space3> p3;
ParticleSystem<Space2> p2;
p3.DumpParticle();
p2.DumpParticle();
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgU3BhY2UyCnsKICAgIHN0cnVjdCBWZWN0b3IKICAgIHsKCiAgICB9OwoKfTsKc3RydWN0IFNwYWNlMwp7CiAgICBzdHJ1Y3QgVmVjdG9yCiAgICB7CgogICAgfTsKCn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBTcGFjZT4Kc3RydWN0IFBhcnRpY2xlU3lzdGVtCnsKICAgIHN0cnVjdCBQYXJ0aWNsZURhdGE7CiAgICB2b2lkIER1bXBQYXJ0aWNsZSgpIHt9CiAgICBzdGQ6OnZlY3RvcjxQYXJ0aWNsZURhdGE+IHBhcnRpY2xlczsKICAgIFBhcnRpY2xlU3lzdGVtKCkKICAgIHsKICAgICAgICBwYXJ0aWNsZXMucHVzaF9iYWNrKFBhcnRpY2xlRGF0YSgpKTsKICAgIH0KfTsKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBQYXJ0aWNsZVN5c3RlbTxTcGFjZTI+OjpQYXJ0aWNsZURhdGEKewogICAgZmxvYXQgb3JpZW50YXRpb247CiAgICBmbG9hdCBpbnZJbmVydGlhOwogICAgUGFydGljbGVEYXRhKCkKICAgIHsKICAgICAgICBvcmllbnRhdGlvbiA9IDIuMGYgOwogICAgICAgIGludkluZXJ0aWEgPSAzLjBmOwogICAgfQp9OwoKCnRlbXBsYXRlPD4gc3RydWN0IFBhcnRpY2xlU3lzdGVtPFNwYWNlMz46OlBhcnRpY2xlRGF0YQp7CiAgICBmbG9hdCB0ZXN0OwogICAgUGFydGljbGVEYXRhKCkKICAgIHsKICAgICAgICB0ZXN0ID0gMTAwNTAwLjBmOwogICAgfQp9OwoKdGVtcGxhdGU8Pgp2b2lkIFBhcnRpY2xlU3lzdGVtPFNwYWNlMj46OkR1bXBQYXJ0aWNsZSgpCnsKICAgIHByaW50ZigiMjogJWYgJWZcbiIsIHBhcnRpY2xlc1swXS5vcmllbnRhdGlvbiwgcGFydGljbGVzWzBdLmludkluZXJ0aWEgKTsKfQoKdGVtcGxhdGU8Pgp2b2lkIFBhcnRpY2xlU3lzdGVtPFNwYWNlMz46OkR1bXBQYXJ0aWNsZSgpCnsKICAgIHByaW50ZigiMzogJWZcbiIsIHBhcnRpY2xlc1swXS50ZXN0KTsKfQoKaW50IG1haW4oKQp7CiAgICBQYXJ0aWNsZVN5c3RlbTxTcGFjZTM+IHAzOwogICAgUGFydGljbGVTeXN0ZW08U3BhY2UyPiBwMjsKICAgIHAzLkR1bXBQYXJ0aWNsZSgpOwogICAgcDIuRHVtcFBhcnRpY2xlKCk7CiAgICByZXR1cm4gMDsKfQoK