将模板参数与null进行比较

时间:2013-04-12 13:06:19

标签: c++ templates null

我有一个带模板参数的方法

bool insert_into_tree(const T new_key, const long &new_index){}

T仅限于std::stringint类型。我希望new_key的值有意义,因此我不想要空std::string,但可以接受int的零值。

这是与null

进行Java模板比较的示例
if (key == null) {}

key defined as T extends Comparable<? super T>

在c ++中

key is defined as template <class T>

如果Tstd::string,则没有overloaded operator==可以与NULL进行比较。

如果Tint,则可以接受与null的比较。

因此,我可以使用什么方法使模板参数比较像Java一样工作?

换句话说,如果在Java中我有一个模板参数我可以比较为null,我怎么能比较c ++中的模板参数,以便可以实现NULL或其他一些指示null的值。

2 个答案:

答案 0 :(得分:2)

C ++没有可空类型(C ++中的所有类型都是默认的值类型,没有引用类型,Java中是如何使用,所以你无法将某些类型与某些魔法null进行比较)。你可以在这里使用指针或boost::optional

  

如果T为int,则可以接受与null的比较。

是的,这是可以接受的,因为C ++中的NULL只是0。

答案 1 :(得分:2)

首先请记住,这不是Java,它是C ++,它们以不同的方式工作。可能最常用的类似方法是创建Comparable模板,并确保key和要比较的类都实例化它。因此,不要使用std::string,而是使用Comparable< std::string >这是一种方法,但几乎肯定不是最佳方式。

更好地重载比较运算符以提供所需的比较。这将使您在比较中具体。但请注意隐式投射。

无论您选择哪种方式,主要基于代码的更广泛背景,如果没有更多信息,很难具体说明哪种方法最佳。