C ++로 할 수있는 호기심 많은 일이 있습니다 (언어를 지정하지 않았 으며이 답변은 대체 방법을 보는 것이 좋지만 대부분의 경우 유용하다고 생각하지는 않지만 대체로 보는 것이 좋기 때문입니다.)
템플릿을 사용하면 다음과 같은 작업을 수행 할 수 있습니다.
template <class T, class S, int U>
class VectorN
{
protected:
int _vec[U];
public:
S& operator+=(const S c)
{
for(int i = 0; i < U; i++)
{
_vec[i] += c.at(i);
}
return (S&)*this;
}
int at(int n) const
{
return _vec[n];
}
};
template <class T>
class Vec2 : public VectorN<T,Vec2<T>,2>
{
public:
T& x;
T& y;
Vec2(T a, T b) : x(this->_vec[0]), y(this->_vec[1])
{
this->_vec[0] = a;
this->_vec[1] = b;
}
};
template <class T>
class Vec3 : public VectorN<T,Vec3<T>,3>
{
public:
T& x;
T& y;
T& z;
Vec3(T a, T b, T c) : x(this->_vec[0]), y(this->_vec[1]), z(this->_vec[2])
{
this->_vec[0] = a;
this->_vec[1] = b;
this->_vec[2] = c;
}
};
그리고 이것은 다음과 같이 사용될 수 있습니다 :
int main(int argc, char* argv[])
{
Vec2<int> v1(5,0);
Vec2<int> v2(10,1);
std::cout<<((v1+=v2)+=v2).x;
return 0;
}
내가 말했듯이, 이것이 유용하지 않다고 생각하고 도트 / 정규화 / 다른 것들을 구현하려고 시도하고 많은 수의 벡터와 일반화하려고하면 인생이 복잡해질 것입니다.