我有一个带有两个模板参数的模板类,其中包含以下构造函数:
template <class T, class TCompare>
class MyClass {
...
public:
MyClass(TCompare compare);
...
};
我有一个结构,它重载operator()进行整数比较:
struct IntegerLess {
bool operator () {const int& a, const int& b) {
if (a < b)
return true;
return false;
}
};
我想将此结构作为参数传递给MyClass构造函数。我尝试过以下方法:
MyClass<int> myClassObject(IntegerLess());
和
MyClass<int, typename IntegerLess> myClassObject(IntegerLess());
然而,两次我都有编译时错误。在第一种情况下
error: wrong number of template arguments (1, should be 2)
在第二种情况下
error: template argument 2 is invalid
有人可以在这里指出什么是正确的选择吗?谢谢!
答案 0 :(得分:2)
数字1是错误的,因为无法推断出类模板参数 - 您必须明确指定它们(除非它们在类模板定义中具有默认值)。
2号只有一个额外的typename
,不应该存在。正确的语法是:
MyClass<int, IntegerLess> myClassObject(IntegerLess());
如果IntegerLess
是您的实际代码,而不是您为简化问题而制作的模拟,请考虑使用std::less<int>
,而这正是您的课程所做的。您甚至可以将其作为类的默认模板参数,如下所示:
模板&gt; 类MyClass { 上市: 显式MyClass(TCompare compare = TCompare()); // ......其余的和以前一样 };
如果您这样做,您将能够以简化形式使用它:
MyClass<int> myClassObject;