0

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

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

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

这是一个 Java 模板与 null 比较的示例

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 的适当值。

4

2 回答 2

2

C++ 没有可以为空的类型(C++ 中的所有类型默认都是值类型,没有引用类型,Java 中的情况,因此您无法将某些类型与某些神奇的 null 进行比较)。您可以在此处使用指针或boost::optional

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

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

于 2013-04-12T13:09:23.710 回答
2

首先请记住,这不是 Java,而是 C++,它们的工作方式不同。可能最相似的方法是创建一个Comparable模板并确保两者key以及您想要比较的类来实例化它。因此,与其使用std::string你,不如使用Comparable< std::string >这是一种方法,但几乎可以肯定不是最好的方法。

一种更好的方法是重载比较运算符以提供所需的比较。这将使您在比较中更加具体。不过要注意隐式转换。

无论您选择哪种方式,都将主要基于代码的更广泛上下文,并且没有更多信息,很难具体说明哪种方法最好。

于 2013-04-12T13:22:27.947 回答