我有一个带模板参数的方法
bool insert_into_tree(const T new_key, const long &new_index){}
T
仅限于std::string
和int
类型。我希望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>
如果T
为std::string
,则没有overloaded operator==
可以与NULL
进行比较。
如果T
为int
,则可以接受与null的比较。
因此,我可以使用什么方法使模板参数比较像Java一样工作?
换句话说,如果在Java中我有一个模板参数我可以比较为null,我怎么能比较c ++中的模板参数,以便可以实现NULL或其他一些指示null的值。
答案 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 >
这是一种方法,但几乎肯定不是最佳方式。
更好地重载比较运算符以提供所需的比较。这将使您在比较中具体。但请注意隐式投射。
无论您选择哪种方式,主要基于代码的更广泛背景,如果没有更多信息,很难具体说明哪种方法最佳。