template<typename T, int size>
struct base_vec
{
T v[size];
virtual T getLength()
{
return 1;
}
virtual ~base_vec(){}
};
template<typename T, int size>
struct vec : public base_vec<T, size> ///Das Klassentemplate
{
};
template<typename T>
struct vec<T, 3> : public base_vec<T, 1> ///Spezialisierung
{
vec(){}
vec(T , T, T){}
};
typedef vec<float, 2> vec2f;
typedef vec<float, 3> vec3f;
typedef vec<float, 4> vec4f;
int main()
{
vec3f f(1, 2, 3);
f.getLength();
}
dGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHNpemU+CnN0cnVjdCBiYXNlX3ZlYwp7CiAgICBUIHZbc2l6ZV07CgogICAgdmlydHVhbCBUIGdldExlbmd0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgdmlydHVhbCB+YmFzZV92ZWMoKXt9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgc2l6ZT4Kc3RydWN0IHZlYyA6IHB1YmxpYyBiYXNlX3ZlYzxULCBzaXplPiAvLy9EYXMgS2xhc3NlbnRlbXBsYXRlCnsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCB2ZWM8VCwgMz4gOiBwdWJsaWMgYmFzZV92ZWM8VCwgMT4gLy8vU3BlemlhbGlzaWVydW5nCnsKICAgIHZlYygpe30KICAgIHZlYyhUICwgVCwgVCl7fQp9OwoKdHlwZWRlZiB2ZWM8ZmxvYXQsIDI+IHZlYzJmOwp0eXBlZGVmIHZlYzxmbG9hdCwgMz4gdmVjM2Y7CnR5cGVkZWYgdmVjPGZsb2F0LCA0PiB2ZWM0ZjsKCmludCBtYWluKCkKewogICAgICAgIHZlYzNmIGYoMSwgMiwgMyk7CiAgICAgICAgZi5nZXRMZW5ndGgoKTsKfQo=