Примечание. Это дополнительный вопрос к this.
У меня есть группа классов шаблонов, которые делают совершенно разные вещи совершенно по-разному, используя совершенно разные типы данных. Однако они имеют общие имена методов. Например, Get()
, Set()
, Resize()
и т. д. являются допустимыми методами для каждого из рассматриваемых классов. Кроме того, они принимают аргументы в том же порядке. Это позволяет обобщенным недружественным функциям работать с каждым из классов. Упрощенный пример:
template <typename Class, typename Datatype>
void Insert(const Class<Datatype>& Object, const std::size_t Index, const Datatype Value)
{
Object.Resize(Object.Size() + 1);
for (std::size_t CurrentIndex = Object.Size() - 1; CurrentIndex > Index; CurrentIndex--)
{
Object.Set(CurrentIndex, Object.Get(CurrentIndex - 1));
}
Object.Set(Index, Value);
}
Прямо сейчас я просто полагаюсь на свою собственную память, чтобы правильно определить все соответствующие методы. Есть ли способ заставить компилятор применять определение правильных методов? Если нет, есть ли лучший способ сделать это?