123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #pragma once
- #include <functional>
- #include "Betriebssystem.h"
- namespace Framework
- {
- template<typename A, typename B>
- class Either
- {
- private:
- A aValue;
- B bValue;
- bool a;
- public:
- Either( A a )
- {
- aValue = a;
- this->a = 1;
- enshureAUnequalB( aValue );
- }
- Either( B b )
- {
- bValue = b;
- a = 0;
- enshureAUnequalB( bValue );
- }
- bool isA() const
- {
- return a;
- }
- bool isB() const
- {
- return !a;
- }
- A getA() const
- {
- return aValue;
- }
- B getB() const
- {
- return bValue;
- }
- void doIfA( std::function<A> action )
- {
- if( a )
- action( aValue );
- }
- void doIfB( std::function<B> action )
- {
- if( !a )
- action( bValue );
- }
- operator A() const
- {
- assert( a );
- return aValue;
- }
- operator B() const
- {
- assert( !a );
- return bValue;
- }
- };
- }
|