يتم إعطاؤك مقتطف تعليمات برمجية يحدد دالة "نقطة" تحسب حاصل الضرب النقطي لمتجهين رباعي الأبعاد. مهمتك هي تنفيذ فئة القالب `Vector` التي تمثل متجهًا لأي بُعد وتدعم عملية المنتج النقطي.

قم بتنفيذ الفئة والوظيفة التالية:

**فصل**
- `Vector<N, T>`: فئة قالب تمثل متجهًا للبعد `N` واكتب `T`. يجب أن يحتوي على متغيرات الأعضاء التالية:
  - `std::array<T, N> data`: مصفوفة لتخزين عناصر المتجه.

**وظائف الأعضاء**
- `constexpr Vector<N, T>&operator=(const Vector<N, T>&other)`: عامل التعيين الذي ينسخ عناصر `other` في مثيل المتجه الحالي. يُرجع مرجعًا إلى مثيل المتجه الحالي.
- `constexpr T dot(const Vector<N, T>&other)`: لحساب حاصل الضرب النقطي بين مثيل المتجه الحالي و`other`. إرجاع المنتج النقطي.

**قيود**
- معلمة القالب `N` هي عدد صحيح موجب يمثل بُعد المتجه (1 <= N <= 10^6).
- تمثل معلمة القالب `T` نوع العناصر المتجهة ويمكن أن تكون أي نوع حسابي C++.
- تنفيذ الدالة `dot` في مقتطف الشفرة المحدد صحيح ويجب استخدامه كما هو. لا ينبغي عليك تعديل وظيفة "النقطة".

**أمثلة**
مثال 1:
```CPP
Vector<3, int> v1({1, 2, 3});
Vector<3, int> v2({4, 5, 6});
نتيجة كثافة العمليات = v1.dot(v2);
// النتيجة = 1*4 + 2*5 + 3*6 = 4 + 10 + 18 = 32
```

مثال 2:
```CPP
Vector<2, double> v1({1.5, -2.3});
Vector<2, double> v2({3.7, 1.2});
نتيجة مزدوجة = v1.dot(v2);
// النتيجة = 1.5*3.7 + (-2.3)*1.2 = 5.55 - 2.76 = 2.79
```
{"evolved_from": null, "kind": "synthetic", "source": "argilla/DistiCoder-dpo-binarized"}