I持って、次のマッパークラス:C++で参照によって返されたパラメータに物事を累積するのはいいですか?
std::map<uint32_t, uint32_t>& ObjectMapper::getMappingForObject(
Object* object) {
const auto mappingTableIterator = m_objMapping.find(object);
if (mappingTableIterator == m_objMapping.end()) {
auto it = m_objMapping.emplace(object,
std::map<uint32_t, uint32_t>());
return it.first->second;
}
return mappingTableIterator->second;
}
がそれでは呼び出し側がこれを行うことができます:
std::map<uint32_t, uint32_t>& mappingTable =
objMapper.getMappingForObject(object);
そして、上に行くと追加し、実装がこのようなものである
class ObjectMapper {
public:
std::map<uint32_t, uint32_t>& getMappingForObject(
Object* object);
private:
std::unordered_map<Object*, std::map<uint32_t, uint32_t>> m_objMapping;
};
/mappingTable
のものを削除する。
これはC++の良いパターンですか?私はこれが所有権を渡すために参照出力パラメータを使用していると感じていますが、それは匂いですが、わかりません。より良い方法がありますか?
あなたの 'getMappingForObject'はマップの' operator [] 'です... –
あなたは所有権を渡さなかったので、あなたの' unordered_map'は生のポインタしか持っていません。あなたは出力パラメータを持っていません。何かが "コードのにおい"であるかどうかは、非常に意見があります。 –
「それはにおいですか?」と尋ねるのは正確にはどういう意味ですか?おそらくタイトルはあまり慣れないべきです。 –