mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-17 22:03:07 -06:00
New Core Tutorial
git-svn-id: svn://ultimatepp.org/upp/trunk@10538 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
dd88feaf2e
commit
6c22e727de
37 changed files with 3125 additions and 0 deletions
52
tutorial/CoreTutorial/One.cpp
Normal file
52
tutorial/CoreTutorial/One.cpp
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#include "Tutorial.h"
|
||||
|
||||
void OneTutorial()
|
||||
{
|
||||
/// .`One`
|
||||
|
||||
/// `One` is a container that can store none or one element of T or derived from T. It is
|
||||
/// functionally quite similar to `std::unique_ptr`, but has some convenient features.
|
||||
|
||||
struct Base {
|
||||
virtual String Get() = 0;
|
||||
virtual ~Base() {}
|
||||
};
|
||||
|
||||
struct Derived1 : Base {
|
||||
virtual String Get() { return "Derived1"; }
|
||||
};
|
||||
|
||||
struct Derived2 : Base {
|
||||
virtual String Get() { return "Derived2"; }
|
||||
};
|
||||
|
||||
One<Base> s;
|
||||
|
||||
/// `operator bool` of one returns true if it contains an element:
|
||||
|
||||
DUMP((bool)s);
|
||||
|
||||
///
|
||||
|
||||
s.Create<Derived1>();
|
||||
DUMP((bool)s);
|
||||
DUMP(s->Get());
|
||||
|
||||
/// You can use `Is` to check if certain type is currently stored in `One`:
|
||||
|
||||
DUMP(s.Is<Derived1>());
|
||||
DUMP(s.Is<Base>());
|
||||
DUMP(s.Is<Derived2>());
|
||||
|
||||
/// To get a pointer to the contained instance, use `operator~`:
|
||||
|
||||
Base *b = ~s;
|
||||
DUMP(b->Get());
|
||||
|
||||
/// Clear method removes the element from One:
|
||||
|
||||
s.Clear();
|
||||
DUMP((bool)s);
|
||||
|
||||
///
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue