c++ - قالب - قوالب اوبن كارت معربة مجانية



C++ مقارنة نوع القالب أثناء وقت التحويل البرمجي (1)

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

template<class T>
class MyClass
{
   public:
      void do()
      {
         #if T is equal to vector<int>
            // add vector<int> specific code
         #if T is equal to list<double>
            // add list<double> specific code
         #else
            cout << "Unsupported data type" << endl;
         #endif
      }
};

كيف يمكنني مقارنة أنواع القوالب بنوع آخر أثناء وقت التحويل كما هو موضح في المثال أعلاه؟ لا أريد إضافة فئات فرعية محددة تتعامل مع أنواع معينة.


أول الأشياء أولا - do هو الكلمة، لا يمكن أن يكون لها وظيفة مع هذا الاسم.
ثانيا، يعمل قبل المعالج قبل مرحلة التجميع، وذلك باستخدام الاشياء من القوالب في ذلك هو من السؤال.

وأخيرا، يمكنك تخصيص جزء فقط من قالب فئة، إذا جاز التعبير. هذا سيفي بالغرض:

#include <iostream>
#include <vector>
#include <list>

template<class T>
class MyClass
{
   public:
      void run()
      {
            std::cout << "Unsupported data type" << std::endl;
      }
};

template<>
void MyClass<std::vector<int>>::run()
{
    // vector specific stuff
}

template<>
void MyClass<std::list<double>>::run()
{
    // list specific stuff
}

عرض حي.





typename