【发布时间】:2010-02-17 05:56:24
【问题描述】:
我已经声明了一个模板类 MyContainer,如下所示,然后创建了一个 DataType1 类型的实例。 DataType1 类提供了一个友元函数“DataSpecificComparison”,std::sort 使用它来比较 DataType1 对象。程序正确编译和排序。
然后我定义了一个名为 DataType2 的类,给它一个“DataSpecificComparison”的友元实现,并用它来创建另一个 MyContainer 实例。
我现在无法将程序编译为“C2914: 'std::sort' : cannot deduc template argument as function argument is ambiguous” 编译时报错。
开发人员如何指定 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)
}
【问题讨论】:
-
可能是因为您使用的是指针向量?只是猜测。
-
当我只定义了MyContainer
,它的友元函数“DataSpecificComparison”应用程序编译运行。正是在定义 DataType2 并创建了 MyContainer 的实例时,才发生此错误。顺便说一句——我对这个解决方案的第一次尝试涉及使用 std::sort,但没有实现用户定义的二元谓词——我只是用 DataType1 实现重载了默认的小于 (