Указатель на абстрактный шаблонный базовый класс?

Оставленный участвует в LINQ, возможны с DefaultIfEmpty () метод. У меня нет точного синтаксиса для Вашего случая хотя...

На самом деле я думаю, изменяете ли Вы просто домашних животных на домашних животных. DefaultIfEmpty () в запросе это могло бы работать...

РЕДАКТИРОВАНИЕ: Я действительно не должен отвечать на вещи когда его последнее...

10
задан nhaa123 10 February 2016 в 09:34
поделиться

2 ответа

Обычно это делается с помощью вашего шаблона, наследуемого от класса интерфейса, IE:

template <class T> class Dendrite : public IDendrite
{
        public:
                Dendrite()
                {
                }

                virtual ~Dendrite()
                {
                }

                void Get(std::vector<T> &o) = 0;

        protected:
                std::vector<T> _data;
};

, а затем ваш класс IDendrite может быть сохранен как указатели:

std::vector<IDendrite*> m_dendriteVec;

Однако в вашей ситуации, вы принимаете параметр шаблона как часть своего интерфейса. Вам также может потребоваться обернуть это.

class IVectorParam
{
}

template <class T>
class CVectorParam : public IVectorParam
{
    std::vector<T> m_vect;
}

дает вам

class IDendrite
{
   ...
public:
   virtual ~IDendrite()
   virtual void Get(IVectorParam*) = 0; 
}

template <class T> class Dendrite : public IDendrite
{
  ...
  // my get has to downcast to o CVectorParam<T>
  virtual void Get(IVectorParam*);
};
15
ответ дан 3 December 2019 в 22:37
поделиться

Да, это возможно. Просто не забудьте предоставить виртуальные функции и виртуальный деструктор. Кроме того, вы можете использовать typeid для получения фактического типа (а также dynamic_cast для проверки типа)

0
ответ дан 3 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: