1

我有一个带有两个模板参数的模板类和以下构造函数:

template <class T, class TCompare>
class MyClass {
...
public:
MyClass(TCompare compare);
...
};

我有一个重载运算符 () 以进行整数比较的结构:

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

有人可以在这里指出正确的选择吗?谢谢!

4

1 回答 1

2

数字 1 是错误的,因为无法推断类模板参数 - 您必须明确指定它们(除非它们在类模板定义中具有默认值)。

2号只是有一个额外typename的不应该在那里。正确的语法是:

MyClass<int, IntegerLess> myClassObject(IntegerLess());

如果IntegerLess是您的实际代码而不是您为简化问题而制作的模拟代码,请考虑std::less<int>改用它,这正是您的类所做的。您甚至可以将其设为该类的默认模板参数,如下所示:

模板 > 类 MyClass { public: 显式 MyClass(TCompare compare = TCompare()); // ... 其余的和以前一样 };

如果这样做,您将能够以简化的形式使用它:

MyClass<int> myClassObject;
于 2013-10-31T09:57:14.310 回答