Restrict access to the virtual functions move and copy

* These are meant to be used by detail::STVar only and
  are otherwise error-prone to call.
This commit is contained in:
Howard Hinnant
2021-10-19 14:02:30 -04:00
committed by Nik Bougalis
parent 74e6ed1af3
commit 0c13676d5f
13 changed files with 103 additions and 75 deletions

View File

@@ -33,6 +33,10 @@ namespace ripple {
enum class JsonOptions { none = 0, include_date = 1 };
namespace detail {
class STVar;
}
// VFALCO TODO fix this restriction on copy assignment.
//
// CAUTION: Do not create a vector (or similar container) of any object derived
@@ -77,11 +81,6 @@ public:
bool
operator!=(const STBase& t) const;
virtual STBase*
copy(std::size_t n, void* buf) const;
virtual STBase*
move(std::size_t n, void* buf);
template <class D>
D&
downcast();
@@ -126,6 +125,14 @@ protected:
template <class T>
static STBase*
emplace(std::size_t n, void* buf, T&& val);
private:
virtual STBase*
copy(std::size_t n, void* buf) const;
virtual STBase*
move(std::size_t n, void* buf);
friend class detail::STVar;
};
//------------------------------------------------------------------------------