我有以下的代码块:
std::visit([&](auto &&arg)
{
using T = std::decay_t<decltype(arg)>;
if constexpr (
std::is_same_v<T, size_t> ||
std::is_same_v<T, int> ||
std::is_same_v<T, double> ||
std::is_same_v<T, bool>
) {
document->AddMember(value.first.c_str(), arg, allocator);
}
else if constexpr (std::is_same_v<T, std::string>){
document->AddMember(
rapidjson::StringRef(value.first.c_str()),
rapidjson::StringRef(arg.c_str()),
allocator
);
}
else if constexpr (std::is_same_v<T, std::shared_ptr<Serializable>>) {
// TODO
}
else if constexpr (std::is_same_v<T, std::vector<std::string>>) {
for (const auto &strVal: arg) {
// TODO
}
}
else if constexpr (std::is_same_v<T, std::vector<std::shared_ptr<Serializable>>>) {
for (const auto &strVal: arg) {
// TODO
}
}
else {
throw UndefinedException("Invalid type encountered in instance of serial::Serializable");
}
}, value);
当我尝试进行编译时,出现以下错误:
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/variant:1651:23: error: no member named 'valueless_by_exception' in 'std::pair<const std::__cxx11::basic_string<char>, std::variant<unsigned long, int, double, bool, std::__cxx11::basic_string<char>, std::shared_ptr<trogdor::serial::Serializable>, std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >, std::vector<std::shared_ptr<trogdor::serial::Serializable>, std::allocator<std::shared_ptr<trogdor::serial::Serializable> > > > >'
if ((__variants.valueless_by_exception() || ...))
我不太清楚这是什么意思或如何修复它。有人能帮我理解发生了什么,并告诉我如何修改我的代码以使其编译吗?
std::variant<Types...>::valueless_by_exception
。 - Ted Lyngmo