Оставленный участвует в LINQ, возможны с DefaultIfEmpty () метод. У меня нет точного синтаксиса для Вашего случая хотя...
На самом деле я думаю, изменяете ли Вы просто домашних животных на домашних животных. DefaultIfEmpty () в запросе это могло бы работать...
РЕДАКТИРОВАНИЕ: Я действительно не должен отвечать на вещи когда его последнее...
Обычно это делается с помощью вашего шаблона, наследуемого от класса интерфейса, 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*);
};
Да, это возможно. Просто не забудьте предоставить виртуальные функции и виртуальный деструктор. Кроме того, вы можете использовать typeid для получения фактического типа (а также dynamic_cast для проверки типа)