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

Zig*_*bra 4 c++ null exception

如果我有如下界面:

template <typename V, typename K>
V get(K key);  // Return the value of the key 
Run Code Online (Sandbox Code Playgroud)

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

还有一个例外处理这里处理不存在的密钥的最佳方法吗?

5go*_*der 5

你不能假设这V是一个指针.例如,如果Vint,则不能return,nullptr因为它不是有效值int.如果V是指针类型,请考虑它是否nullptr是一个有效的值,以便将其插入到地图中.如果是这样,怎么可能主叫区分nullptrreturn编表示"未发现",从"实际" nullptr

如果您可以return指向地图中的项目而不是副本,请考虑此签名.

template <typename V, typename K>
V * get(K key);
Run Code Online (Sandbox Code Playgroud)

使用const V *,如果你宁愿没有来电修改对象在地图中.

或者,您可以使用optional<T>.您可以在Boost中找到实现,也可以作为标准库的实验扩展.

当然,您也可以throw使用例外来指示您的地图中没有该密钥.但是,如果您的客户有合理的方式提前知道密钥是否存在,那么大多数编码标准只会被认为是好的风格.应使用例外来表示异常,错误的情况.地图中不存在密钥的事实不太可能符合这一要求,除非在您的情况下,可以假设密钥集是已知的.