|
| ReinitOnCopy ()=delete |
| Default constructor is deleted; use ResetOnCopy instead. More...
|
|
| ReinitOnCopy (const T &value) |
| Construct or implicitly convert from an object of type T . This sets both the current and remembered initial value to the given value . More...
|
|
| ReinitOnCopy (T &&value) |
| Construct or implicitly convert from an rvalue object of type T . This sets both the current and remembered initial value to the given value . More...
|
|
| ReinitOnCopy (const ReinitOnCopy &source) |
| Copy constructor sets the value and remembered initial value to the initial value in the source, using type T 's copy constructor. More...
|
|
| ReinitOnCopy (ReinitOnCopy &&source) |
| Move constructor is simply a pass-through to the move constructor of the contained object for both the current and initial values. More...
|
|
ReinitOnCopy & | operator= (const ReinitOnCopy &ignored) |
| Copy assignment reinitializes this object to its original condition; the source argument is ignored. More...
|
|
ReinitOnCopy & | operator= (ReinitOnCopy &&source) |
| Move assignment uses type T 's move assignment for the current value but does not change the remembered initial value here. More...
|
|
ReinitOnCopy & | operator= (const T &value) |
| Assignment from an object of type T uses T 's copy assignment operator; affects only the current value but does not change the remembered initial value. More...
|
|
ReinitOnCopy & | operator= (T &&value) |
| Assignment from an rvalue object of type T uses T 's move or copy assignment operator; affects only the current value but does not change the remembered initial value. More...
|
|
const T & | getT () const |
| Return a const reference to the contained object of type T . More...
|
|
T & | updT () |
| Return a writable reference to the contained object of type T . More...
|
|
const T & | getReinitT () const |
| (Advanced) Return a const reference to the stored initial value. More...
|
|
T & | updReinitT () |
| (Advanced) Return a writable reference to the stored initial value. Use of this should be rare and restricted to constructors. More...
|
|
template<class T>
class SimTK::ReinitOnCopy< T >
Ensures that a data member of type T
is automatically reinitialized to a given initial value upon copy construction or copy assignment. This allows the compiler-generated default copy methods to be used.
The template type T
here is required to be CopyAssignable
, CopyConstructible
, and Destructible
, and cannot be an array type. There is space overhead here for one extra copy of T
used to hold the initial value. The default constructor is suppressed here; if you just need the data member reset to zero or to its default-constructed value, use class ResetOnCopy<T>
instead. That class has zero overhead and accepts a wider range of template arguments.
Here are some usage examples:
class Thing {
ReinitOnCopy<int> m_which{-1};
ReinitOnCopy<string> m_name{"unknown"};
ReinitOnCopy<const char*> m_desc{"none given"};
ReinitOnCopy<Color> m_color{
Blue};
ResetOnCopy<unsigned> m_count1;
ReinitOnCopy<unsigned> m_count2;
ReinitOnCopy<unsigned> m_count3{0};
ResetOnCopy<std::unique_ptr<Something>> m_myThing;
};
Other than copy behavior, an object of type ReinitOnCopy<T>
behaves just like the underlying object of type T
. It will implicitly convert to T
when needed, and inherit constructors, assignment, and other methods from T
. Move construction and move assignment behave as they would for T
, and an assignment from an object of type T
to an object of type ReinitOnCopy<T>
will invoke T
's ordinary copy assignment operator if there is one, and fail to compile if an attempt is made to use a non-existent assignment operator.
- Template Parameters
-
T | Template type that is a numeric, character, enum, or pointer built-in type, or a class type that is CopyConstructible, CopyAssignable, and Destructible. Array types are not allowed. |
- See also
- ResetOnCopy if you only need to reinitialize to the default value.