Функции шаблонов элементов не могут быть виртуальными - временное решение?

Я понимаю , почему функции шаблона-члена не могут быть виртуальными , но я не уверен, какое решение лучше всего.

У меня есть код, похожий на этот:

struct Entity
{
    template
    virtual It GetChildren(It it) { return it; }
};

struct Person : public Entity
{
    template
    virtual It GetChildren(It it) { *it++ = "Joe"; }
};

struct Node : public Entity
{
    Node left, right;
    const char *GetName() { return "dummy"; }

    template
    virtual It GetChildren(It it)
    {
        *it++ = left.GetName();
        *it++ = right.GetName();
        return it;
    }
};

Ясно, что мне нужна динамическая диспетчеризация. Но учитывая, что классы на самом деле довольно большие, я не хочу создавать шаблон для всего класса . И я все еще хочу поддерживать любой итератор.

Как лучше всего этого добиться?

5
задан Community 23 May 2017 в 12:11
поделиться