Я объявил шаблонный класс MyContainer как ниже, а затем создал его экземпляр типа DataType1. Класс DataType1 предоставляет дружественную функцию «DataSpecificComparison», которая используется std :: sort для сравнения объектов DataType1. Программа скомпилирована и отсортирована правильно.
Затем я определил класс с именем DataType2, дал ему дружественную реализацию «DataSpecificComparison» и использовал его для создания другого экземпляра MyContainer.
Теперь я не могу скомпилировать программу как " C2914: 'std :: sort': не могу вывести аргумент шаблона, так как аргумент функции является неоднозначным " Сообщается об ошибке времени компиляции.
Как разработчик может указать, что двоичный предикат DataSpecificComparison должен принимать аргументы типа шаблона T *? Или есть другой способ обойти эту проблему?
template <class T>
class MyContainer
{
private:
vector<T*> m_vMyContainerObjects;
....
public:
....
void SortMyContainerObjects()
{
std::sort(m_vMyContainerObjects.begin(), m_vMyContainerObjects.end(), DataSpecificComparison)
}
}
class DataType1
{
....
friend bool DataSpecificComparison(const DataType1 * lhs, const DataType1 * rhs)
}
class DataType2
{
....
friend bool DataSpecificComparison(const DataType2* lhs, const DataType2* rhs)
}