تغيير ديناميكيا استراتيجية تخصيص في دفعة :: ناقلات وتعزيز :: مصفوفة

StackOverflow https://stackoverflow.com/questions/727066

سؤال

في مشروعي الجديد، أقوم ببناء وحدة إدارة البيانات. أريد أن أعطي نوع تخزين قالب بسيط إلى الطبقات العليا مثل

template<typename T>
class Data
{
 public:
  T getValue();
 private:

 boost::numeric::ublas::matrix<T> data;
}

هدفي هو، لتغيير مخصص البيانات مع بعض المخصصات المختلفة مثل Prost.inter Process Monocator أو Boost.Pool MONOCATION (زيادة مصفوفة UBLAS، يأخذ فئات المتجهات مخصصا كمعلمة قالب). وإعطاء سوى فئة واحدة وطريقة المصنع لإنشاء مخصص مناسب تحت الغلاف. يمكن أن تكون الفئة الأساسية الافتراضية حلوة لكنني لم أستطع التعامل مع كيفية استخدامها مع القوالب. ما نوع من أنماط التصميم أو الحلول التي تقدمها؟

يحرر:

سأستخدم boost.pool و boost.shared_memory_allocator.shared_memory_allocator.biefly أريد أن يكون لدي دروس مختلفة مع استراتيجيات مختلفة تخصيص. ولكن وجهة نظري هي الأجزاء العلوية من البرنامج يجب أن لا يكون لها معرفة حولها. تحدي حقيقي هو جمع فئات قالب مختلفة مع الطبقات الأساسية متطابقة.

تحرير: لأحد يريد استخدام فئة مصفوفة مع مخصص مخصص.

هو مثل هذا:

 using boost::numeric::ublas;

    template<typename T, class Allocator = boost::pool_allocator<T>>
    class
    {      
      public:
      matrix<T, row_major, std::vector<T,Allocator>> mData;
    }
هل كانت مفيدة؟

المحلول

ليس من الواضح ما تريد، ولكن كطلق النار في الظلام، هل ما يلي مفيد؟

template<typename T>
class IData
{
 public:
  virtual T getValue() = 0;
  virtual ~IData() {}
};

template<typename T, typename Allocator=std::allocator<T> >
class Data : public IData<T>
{
 public:
  virtual T getValue();
 private:

 boost::numeric::ublas::matrix<T, Allocator> data;
}

نصائح أخرى

هل تحاول تبديل المخصصات في تجميع الوقت على أساس النوع؟ كنت بحاجة إلى if-else القالب وبعض تعريفات فئة المخصص (القالب).

إذا كنت ترغب في إجراء مخصصات وقت التشغيل، فمن الأسهل: لقد وضعت الفئة الأساسية (فئة تعريف الواجهة) في القالب وتمرير الفئات الفرعية المناسبة بناء على أي حالة تحتاج إلى الوفاء بها.

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