在C++中使用模板时返回NULL

Return NULL when using template in C++

本文关键字:返回 NULL C++      更新时间:2023-10-16

如果我有如下接口:

template <typename V, typename K>
V get(K key);  // Return the value of the key 

"找不到密钥时返回NULL"的规范有意义吗?当除了抛出异常之外没有找到密钥时,是否还有其他方法可以处理这种情况?

抛出异常也是处理不存在密钥的最佳方式吗?

不能假定V是指针。例如,如果Vint,则不能将return作为nullptr,因为它不是int的有效值。如果V是指针类型,请考虑nullptr是否是将其插入到映射中的有效值。如果是,调用者如何区分nullptrreturn表示"未找到")和"实际"nullptr

如果您可以return使用指向映射中项目的指针,而不是副本,请考虑此签名。

template <typename V, typename K>
V * get(K key);

如果不希望调用方修改映射中的对象,请使用const V *

或者,您可以使用optional<T>。您可以在Boost中找到一个实现,以及对标准库的实验扩展。

当然,您也可以将throw作为一个异常来指示密钥不在您的映射中。然而,只有当您的客户有合理的方式提前知道密钥是否存在时,大多数编码标准才会认为这是一种好的风格。异常应用于表示异常、错误的情况。地图中不存在密钥这一事实不太可能符合这一条件,除非在您的情况下,可以假设密钥集是已知的。