added overload for std::vector<bool> #494

Adds a to_json function for std::vector<bool> to allow implicit
conversion from bit vectors to basic_json.
上级 758c4add
......@@ -324,6 +324,19 @@ struct external_constructor<value_t::array>
j.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
j.assert_invariant();
}
template<typename BasicJsonType>
static void construct(BasicJsonType& j, const std::vector<bool>& arr)
{
j.m_type = value_t::array;
j.m_value = value_t::array;
j.m_value.array->reserve(arr.size());
for (bool x : arr)
{
j.m_value.array->push_back(x);
}
j.assert_invariant();
}
};
template<>
......@@ -562,6 +575,12 @@ void to_json(BasicJsonType& j, UnscopedEnumType e) noexcept
external_constructor<value_t::number_integer>::construct(j, e);
}
template<typename BasicJsonType>
void to_json(BasicJsonType& j, std::vector<bool> e) noexcept
{
external_constructor<value_t::array>::construct(j, e);
}
template <
typename BasicJsonType, typename CompatibleArrayType,
enable_if_t <
......
......@@ -324,6 +324,19 @@ struct external_constructor<value_t::array>
j.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
j.assert_invariant();
}
template<typename BasicJsonType>
static void construct(BasicJsonType& j, const std::vector<bool>& arr)
{
j.m_type = value_t::array;
j.m_value = value_t::array;
j.m_value.array->reserve(arr.size());
for (bool x : arr)
{
j.m_value.array->push_back(x);
}
j.assert_invariant();
}
};
template<>
......@@ -562,6 +575,12 @@ void to_json(BasicJsonType& j, UnscopedEnumType e) noexcept
external_constructor<value_t::number_integer>::construct(j, e);
}
template<typename BasicJsonType>
void to_json(BasicJsonType& j, std::vector<bool> e) noexcept
{
external_constructor<value_t::array>::construct(j, e);
}
template <
typename BasicJsonType, typename CompatibleArrayType,
enable_if_t <
......
......@@ -795,4 +795,13 @@ TEST_CASE("regression tests")
std::string s2 = j2.dump();
CHECK(s1 == s2);
}
SECTION("issue #494 - conversion from vector<bool> to json fails to build")
{
std::vector<bool> boolVector = {false, true, false, false};
json j;
j["bool_vector"] = boolVector;
CHECK(j["bool_vector"].dump() == "[false,true,false,false]");
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册