سؤال

عادة ما تكون أعضاء / كائنات ثابتة من فئة واحدة هي نفسها لكل مثيل للفئة وجود عضو ثابت / كائن ثابت. على أي حال حول ما إذا كان الكائن الثابت جزءا من فئة القالب ويعتمد أيضا على حجة القالب؟ على سبيل المثال، مثل هذا:

template<class T>
class A{
public:
  static myObject<T> obj;
}

إذا كنت سأكون كائن واحد int وآخر float, ، أعتقد أنه سيكون هناك اثنين obj, ، واحد لكل نوع؟

إذا كنت سأخلق كائنات متعددة من نوع int ومتعدد floatS، هل لا يزال اثنين obj الحالات، لأنني فقط باستخدام نوعين مختلفين؟

هل كانت مفيدة؟

المحلول

يتم تختلف الأعضاء الثابتة عن كل تهيئة قالب مختلفة. وذلك لأن كل تهيئة القالب عبارة عن فئة مختلفة يتم إنشاؤها بواسطة المحول البرمجي في المرة الأولى التي يواجهها تهيئة القالب المحددة.

حقيقة أن متغيرات الأعضاء الثابتة مختلفة يظهر به هذا الرمز:

#include <iostream>

template <class T> class Foo {
  public:
    static int bar;
};

template <class T>
int Foo<T>::bar;

int main(int argc, char* argv[]) {
  Foo<int>::bar = 1;
  Foo<char>::bar = 2;

  std::cout << Foo<int>::bar  << "," << Foo<char>::bar;
}

مما يؤدي إلى

1,2

نصائح أخرى

A<int> و A<float> هي نوعان مختلفان تماما، لا يمكنك وضعها بينهما بأمان. حالتين من A<int> سوف تشارك نفس myobject ثابت.

هناك العديد من متغيرات الأعضاء الثابتة حيث توجد فصول وهذا ينطبق على قدم المساواة على القوالب. ينشئ كل مثيل منفصل لفئة القالب متغير عضو ثابت واحد فقط. عدد الكائنات ذات تلك الفئات القيبوية غير ذات صلة.

في قوالب C ++ هي في الواقع نسخ من الفصول الدراسية. أفكر في مثالك سيكون هناك مثيل ثابت واحد لكل حالة قالب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top