enum class ValueIndices
{
qqq = 0,
www,
NAX_VALUES
};
using Values = std::array<int32_t, size_t( ValueIndices::MAX_VALUES )>;
enum class MyEnum { VAL1, VAL2, VAL3 };
MyEnum myTemp = MyEnum::VAL2;
myTemp = MyEnum::VAL3; template< typename TEnumType, typename TValueType >
class EnumValues final
{
static_assert( std::is_enum<TEnumType>::value, "The `TEnumType` type have to be enumeration." );
public:
using UnderlyingType = std::underlying_type_t<TEnumType>;
using Values = std::array<TValueType, static_cast<UnderlyingType>( TEnumType::MAX )>;
EnumValues() = default;
EnumValues( const EnumValues& ) = default;
EnumValues( EnumValues&& ) = default;
EnumValues( std::initializer_list<TValueType> values );
EnumValues( const Values& values );
EnumValues( Values&& values );
inline EnumValues& operator = ( cosnt EnumValues& ) = default;
inline EnumValues& operator = ( EnumValues&& ) = default;
inline EnumValues& operator = ( std::initializer_list<TValueType> values );
inline EnumValues& operator = ( const Values& values );
inline EnumValues& operator = ( Values&& values );
inline TValueType& operator [] ( const TEnumType value ) { return m_values[ static_cast<UnderlyingType>( value ) ]; };
inline const TValueType& operator [] ( const TEnumType value ) const { return m_values[ static_cast<UnderlyingType>( value ) ]; };
private:
Values m_values;
};void somefunc() {do_something_with blabla::a2}
enum Foo {
case qqq(Int)
case www(Int)
}
let x = Foo.qqq(5)
let y = Foo.www(10)class Foo {
public:
virtual ~Foo() = 0;
};
class qqq : public Foo {
public:
int value;
explicit qqq(int value);
};
class www : public Foo {
public:
int value;
explicit www(int value);
};
using FooPtr = std::unique_ptr<Foo>;
FooPtr makeQqq(int value);
FooPtr makeWww(int value);
FooPtr x = makeQqq(5);
FooPtr y = makeWww(10);type_safe (кликабельно).#include <type_safe/strong_typedef.hpp>
#include <type_safe/variant.hpp>
namespace ts = type_safe;
using qqq = ts::strong_typedef<int>;
using www = ts::strong_typedef<int>;
using Foo = ts::variant<qqq, www>;
// ...
auto x = Foo(qqq(5));
auto y = Foo(www(10));
if (x.has_value(ts::variant_type<qqq>{})) {
qqq value = x.value(ts::variant_type<qqq>{}));
std::cout << "qqq" << ' ' << static_cast<int>(value);
}