显式初始化模板类

时间:2013-10-31 09:53:56

标签: c++ class templates

我有一个带有两个模板参数的模板类,其中包含以下构造函数:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

MyClass<int> myClassObject;