Примечание. Это дополнительный вопрос к 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);
}
Сейчас я просто полагаюсь на свою память, чтобы правильно определить все соответствующие методы.Есть ли способ заставить компилятор принудительно определить правильные методы?Если нет, есть ли лучший способ сделать это?