Remove duplicate util::key_error exception, don't require the key to be convertible to string
This commit is contained in:
parent
470b7a0757
commit
368d1edd71
3 changed files with 20 additions and 31 deletions
|
|
@ -2,12 +2,30 @@
|
||||||
|
|
||||||
#include <psemek/util/exception.hpp>
|
#include <psemek/util/exception.hpp>
|
||||||
#include <psemek/util/to_string.hpp>
|
#include <psemek/util/to_string.hpp>
|
||||||
|
#include <psemek/util/type_name.hpp>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace psemek::util
|
namespace psemek::util
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
|
||||||
|
template <typename Key>
|
||||||
|
std::string key_error_to_string(Key const & key, decltype(util::to_string(key)) *)
|
||||||
|
{
|
||||||
|
return util::to_string("key ", key, " not found of type ", type_name<Key>());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Key>
|
||||||
|
std::string key_error_to_string(Key const &, ...)
|
||||||
|
{
|
||||||
|
return util::to_string("key not found of type ", type_name<Key>());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
struct key_error_base
|
struct key_error_base
|
||||||
: exception
|
: exception
|
||||||
{
|
{
|
||||||
|
|
@ -19,7 +37,7 @@ namespace psemek::util
|
||||||
: key_error_base
|
: key_error_base
|
||||||
{
|
{
|
||||||
key_error(Key const & key, boost::stacktrace::stacktrace stacktrace = {})
|
key_error(Key const & key, boost::stacktrace::stacktrace stacktrace = {})
|
||||||
: key_error_base(util::to_string("no such key: ", key), std::move(stacktrace))
|
: key_error_base(detail::key_error_to_string(key), std::move(stacktrace))
|
||||||
, key_(key)
|
, key_(key)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <psemek/util/to_string.hpp>
|
|
||||||
#include <psemek/util/type_name.hpp>
|
|
||||||
|
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
namespace psemek::util
|
|
||||||
{
|
|
||||||
|
|
||||||
template <typename Key>
|
|
||||||
struct key_error
|
|
||||||
: std::out_of_range
|
|
||||||
{
|
|
||||||
key_error(Key const & key)
|
|
||||||
: std::out_of_range(to_string("unknown key ", key, " of type ", type_name<Key>()))
|
|
||||||
, key_(key)
|
|
||||||
{}
|
|
||||||
|
|
||||||
Key const & key() const noexcept
|
|
||||||
{
|
|
||||||
return key_;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
Key key_;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <psemek/util/functional.hpp>
|
#include <psemek/util/functional.hpp>
|
||||||
#include <psemek/util/key_error.hpp>
|
#include <psemek/util/at.hpp>
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue