Applies some review comments.

Proper visit for ESM::CellVariant

Fixed MWWorldCell constructor
This commit is contained in:
florent.teppe 2023-01-31 19:50:48 +01:00
parent 4e7cde5d72
commit 1caed2de2a
13 changed files with 71 additions and 102 deletions

View file

@ -38,21 +38,8 @@ namespace ESM
const ESM4::Cell& getEsm4() const;
const ESM::Cell& getEsm3() const;
template <class F>
auto visit(F&& f) const
{
return std::visit(f, mVariant);
}
template <class F>
auto visit(F&& f)
{
return std::visit(f, mVariant);
}
template <class F>
auto visit(F&& f, const CellVariant& v2) const
{
return std::visit(f, mVariant, v2.mVariant);
}
template <class F, class... T>
friend auto visit(F&& f, T&&... v);
};
struct ReferenceVariant
@ -77,24 +64,11 @@ namespace ESM
ESM::CellRef& getEsm3() { return std::get<ESM::CellRef>(mVariant); }
ESM4::Reference& getEsm4() { return std::get<ESM4::Reference>(mVariant); }
};
}
namespace std
{
template <class F>
auto visit(F&& f, const ESM::CellVariant& v)
template <class F, class... T>
auto visit(F&& f, T&&... v)
{
return v.visit(f);
}
template <class F>
auto visit(F&& f, ESM::CellVariant& v)
{
return v.visit(f);
}
template <class F>
auto visit(F&& f, const ESM::CellVariant& v1, const ESM::CellVariant& v2)
{
return v1.visit(f, v2);
return std::visit([&](auto*... ptr) { return std::forward<F>(f)(*ptr...); }, std::forward<T>(v).mVariant...);
}
}
#endif