А можно так?
C++ (Qt)
template <class T>
void DoErase( const T *, Node * node, size_t index ) { static_assert(false, "Invalid T"); }
template <>
void DoErase( const MyClass1 *, Node * node, size_t index ) { node->data1.erase(index); }
template <>
void DoErase( const MyClass2 *, Node * node, size_t index ) { node->data2.erase(index); }
Это ничего не дает - ведь вставить DoErase в базовый класс я не могу - вызовется первый вариант.
овчинка не стоит выделки.
лучше не использовать шаблон.
Можно просто виртуалом
C++ (Qt)
virtual void MyClass1::DoErase( Node * node, size_t index ) { node->data1.erase(index); }
virtual void MyClass2::DoErase( Node * node, size_t index ) { node->data2.erase(index); }
Но такие виртуалы мне придется делать для каждого обращения к data1/data2
Правда здесь оно 1 и есть. Если было бы больше - тогда наверное ото <traits>