模板类的显式初始化

explicit initializtion of template class

本文关键字:初始化      更新时间:2023-10-16

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

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

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

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

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

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

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

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

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

MyClass<int> myClassObject;