Resolve the duplicate registration key issue

This commit is contained in:
zhengjian
2024-07-24 22:55:38 +08:00
parent aa02a7579b
commit b4daa23f5e
+22 -4
View File
@@ -50,16 +50,34 @@ public:
template <bool is_pub = false, typename Function>
void register_handler(std::string const &name, Function f, bool pub = false) {
uint32_t key = MD5::MD5Hash32(name.data());
key2func_name_.emplace(key, name);
return register_nonmember_func<is_pub>(key, std::move(f));
try {
if (key2func_name_.find(key) != key2func_name_.end()) {
throw std::invalid_argument("duplicate registration key !");
} else {
key2func_name_.emplace(key, name);
return register_nonmember_func<is_pub>(key, std::move(f));
}
} catch (const std::exception &e) {
std::cerr << e.what() << '\n';
throw;
}
}
template <bool is_pub = false, typename Function, typename Self>
void register_handler(std::string const &name, const Function &f,
Self *self) {
uint32_t key = MD5::MD5Hash32(name.data());
key2func_name_.emplace(key, name);
return register_member_func<is_pub>(key, f, self);
try {
if (key2func_name_.find(key) != key2func_name_.end()) {
throw std::invalid_argument("duplicate registration key !");
} else {
key2func_name_.emplace(key, name);
return register_member_func<is_pub>(key, f, self);
}
} catch (const std::exception &e) {
std::cerr << e.what() << '\n';
throw;
}
}
void remove_handler(std::string const &name) {