Documentation

    Table of Content
    • CodePorting.Native Product Family
      • CodePorting.Native Cs2Cpp
        • Getting Started
          • Product Overview
          • Installation
          • Licensing
          • How to use CodePorting.Native Cs2Cpp
            • How to Use Command line to port and build Projects
            • How to Use GUI to port and build Projects
        • Developer Guide
          • Porting Simple C# Projects
            • Porting Simple Console Application
            • Porting Simple Library
            • Porting Simple NUnit Test
          • Porting Dependent C# Projects
            • Porting Dependent Console Application
            • Porting Dependent Library
            • Porting Dependent NUnit Test
          • Porting Complex C# Projects
            • How to Convert Complex C# Console Application to C++
            • How to Convert Complex C# Library to C++
            • How to Convert Complex C# NUnit Test to C++
          • Qt support
          • What Converts to What
            • AbstractClasses
            • BreakStatements
            • ClassAutoProperties
            • ClassConstructors
            • ClassEvents
            • ClassFinalizers
            • ClassGenericMethods
            • ClassIndexers
            • ClassMethods
            • ClassProperties
            • ClassStaticConstructor
            • ClassStaticMethods
            • ClassStaticProperties
            • ClassVirtualMethods
            • ContinueStatements
            • Delegates
            • DoWhileStatements
            • Enums
            • EnumTypeCast
            • Exceptions
            • ExpectedException
            • ForeachStatements
            • ForeachStatementsStd
            • ForStatements
            • GenericClasses
            • GenericDelegates
            • GenericInterfaces
            • GenericStructs
            • IfStatements
            • LambdaExpressions
            • NestedClasses
            • ReturnStatements
            • SimpleClass
            • SimpleInterface
            • SimpleStruct
            • SimpleTest
            • StandardTypeCast
            • StaticClass
            • SwitchStatements
            • TestWithSetupMethods
            • ThrowStatements
            • TryCatchFinallyStatements
            • TryCatchStatements
            • TryFinallyStatements
            • VarExpressions
            • WhileStatements
          • CodePorting Native Cs2Cpp Attributes
          • CodePorting Native Cs2Cpp Configuration File
            • CodePorting.Native Cs2Cpp Configuration File Structure
            • Attributes in Configuration file
            • Configuration file Nodes
            • Configuration file Options
          • Memory Management Model
            • Memory Management Model Description
            • Using aliasing constructor to create a smart pointer
          • Cmake Support
          • C++ code injection
          • C++ user-defined exception classes
          • Limitations and Bugs
            • Porter Limitations and Bugs
            • Library Limitations and Bugs
            • Cpp Code Injection
        • Release Notes
          • 2022
            • CodePorting.Native Cs2Cpp 22.5
            • CodePorting.Native Cs2Cpp 22.4
            • CodePorting.Native Cs2Cpp 22.3
            • CodePorting.Native Cs2Cpp 22.2
            • CodePorting.Native Cs2Cpp 22.1
          • 2021
            • CodePorting.Native Cs2Cpp 21.12
            • CodePorting.Native Cs2Cpp 21.11
            • CodePorting.Native Cs2Cpp 21.10.1
            • CodePorting.Native Cs2Cpp 21.10
            • CodePorting.Native Cs2Cpp 21.9
            • CodePorting.Native Cs2Cpp 21.8
            • CodePorting.Native Cs2Cpp 21.7
            • CodePorting.Native Cs2Cpp 21.6
            • CodePorting.Native Cs2Cpp 21.5
            • CodePorting.Native Cs2Cpp 21.4
            • CodePorting.Native Cs2Cpp 21.3
            • CodePorting.Native Cs2Cpp 21.2
            • CodePorting.Native Cs2Cpp 21.1
          • 2020
            • CodePorting.Native Cs2Cpp 20.12
            • CodePorting.Native Cs2Cpp 20.11
            • CodePorting.Native Cs2Cpp 20.10
            • CodePorting.Native Cs2Cpp 20.9
            • CodePorting.Native Cs2Cpp 20.8
            • CodePorting.Native Cs2Cpp 20.7
            • CodePorting.Native Cs2Cpp 20.6
            • CodePorting.Native Cs2Cpp 20.5
            • CodePorting.Native Cs2Cpp 20.4
            • CodePorting.Native Cs2Cpp 20.3
            • CodePorting.Native Cs2Cpp 20.2
            • CodePorting.Native Cs2Cpp 20.1
          • 2019
            • CodePorting.Native Cs2Cpp 19.1
            • CodePorting.Native Cs2Cpp 19.2
            • CodePorting.Native Cs2Cpp 19.3
            • CodePorting.Native Cs2Cpp 19.4
            • CodePorting.Native Cs2Cpp 19.4.1
            • CodePorting.Native Cs2Cpp 19.5
            • CodePorting.Native Cs2Cpp 19.6
            • CodePorting.Native Cs2Cpp 19.7
            • CodePorting.Native Cs2Cpp 19.8
            • CodePorting.Native Cs2Cpp 19.9
            • CodePorting.Native Cs2Cpp 19.10
            • CodePorting.Native Cs2Cpp 19.11
            • CodePorting.Native Cs2Cpp 19.12
          • 2018
            • CodePorting.Native Cs2Cpp 18.9
            • CodePorting.Native Cs2Cpp 18.9.1
            • CodePorting.Native Cs2Cpp 18.10
            • CodePorting.Native Cs2Cpp 18.11
            • CodePorting.Native Cs2Cpp 18.12
    1. Home
    2. CodePorting.Native Product Family
    3. CodePorting.Native Cs2Cpp
    4. Developer Guide
    5. What Converts to What
    6. EnumTypeCast

    EnumTypeCast

    What's on this Page

      • Source C# Code
      • Ported Code
        • C++ Header
        • C++ Source Code

    This example demonstrates how C# enum type cast expression is ported to C++.

    Additional command-line options passed to CsToCppPorter: none.

    Source C# Code

    namespace StatementsPorting
    {
        public enum SomeEnum
        {
            Value1 = 1,
            Value3 = 3,
            Value13 = 13
        }
    
        public class EnumTypeCast
        {
            public void EnumToNumberCasts()
            {
                SomeEnum source = SomeEnum.Value13;
                sbyte dest1 = (sbyte) source;
                byte dest2 = (byte) source;
                short dest3 = (short) source;
                ushort dest4 = (ushort) source;
                int dest5 = (int) source;
                uint dest6 = (uint) source;
                long dest7 = (long) source;
                ulong dest8 = (ulong) source;
                float dest9 = (float) source;
                double dest10 = (double) source;
                char dest11 = (char) source;
            }
    
            public void NumberEnumToCasts()
            {
                sbyte source1 = -11;
                byte source2 = 13;
                short source3 = -333;
                ushort source4 = 666;
                int source5 = -333333;
                uint source6 = 666666;
                long source7 = -333333333;
                ulong source8 = 666666666;
                float source9 = 3.1415926f;
                double source10 = 3.1415926;
                char source11 = 'X';
                SomeEnum dest1 = (SomeEnum) source1;
                SomeEnum dest2 = (SomeEnum) source2;
                SomeEnum dest3 = (SomeEnum) source3;
                SomeEnum dest4 = (SomeEnum) source4;
                SomeEnum dest5 = (SomeEnum) source5;
                SomeEnum dest6 = (SomeEnum) source6;
                SomeEnum dest7 = (SomeEnum) source7;
                SomeEnum dest8 = (SomeEnum) source8;
                SomeEnum dest9 = (SomeEnum) source9;
                SomeEnum dest10 = (SomeEnum) source10;
                SomeEnum dest11 = (SomeEnum) source11;
            }
        }
    }

    Ported Code

    C++ Header

    #pragma once
    
    #include <system/object.h>
    
    namespace StatementsPorting {
    
    enum class SomeEnum
    {
        Value1 = 1,
        Value3 = 3,
        Value13 = 13
    };
    
    class EnumTypeCast : public System::Object
    {
        typedef EnumTypeCast ThisType;
        typedef System::Object BaseType;
        
        typedef ::System::BaseTypesInfo<BaseType> ThisTypeBaseTypesInfo;
        RTTI_INFO_DECL();
        
    public:
    
        void EnumToNumberCasts();
        void NumberEnumToCasts();
        
    };
    
    } // namespace StatementsPorting
    

    C++ Source Code

    #include "EnumTypeCast.h"
    
    #include <cstdint>
    
    namespace StatementsPorting {
    
    RTTI_INFO_IMPL_HASH(1083267223u, ::StatementsPorting::EnumTypeCast, ThisTypeBaseTypesInfo);
    
    void EnumTypeCast::EnumToNumberCasts()
    {
        SomeEnum source = StatementsPorting::SomeEnum::Value13;
        int8_t dest1 = (int8_t)source;
        uint8_t dest2 = (uint8_t)source;
        int16_t dest3 = (int16_t)source;
        uint16_t dest4 = (uint16_t)source;
        int32_t dest5 = (int32_t)source;
        uint32_t dest6 = (uint32_t)source;
        int64_t dest7 = (int64_t)source;
        uint64_t dest8 = (uint64_t)source;
        float dest9 = (float)source;
        double dest10 = (double)source;
        char16_t dest11 = (char16_t)source;
    }
    
    void EnumTypeCast::NumberEnumToCasts()
    {
        int8_t source1 = -11;
        uint8_t source2 = 13;
        int16_t source3 = static_cast<int16_t>(-333);
        uint16_t source4 = static_cast<uint16_t>(666);
        int32_t source5 = -333333;
        uint32_t source6 = 666666;
        int64_t source7 = -333333333;
        uint64_t source8 = 666666666;
        float source9 = 3.1415926f;
        double source10 = 3.1415926;
        char16_t source11 = u'X';
        SomeEnum dest1 = (SomeEnum)source1;
        SomeEnum dest2 = (SomeEnum)source2;
        SomeEnum dest3 = (SomeEnum)source3;
        SomeEnum dest4 = (SomeEnum)source4;
        SomeEnum dest5 = (SomeEnum)source5;
        SomeEnum dest6 = (SomeEnum)source6;
        SomeEnum dest7 = (SomeEnum)source7;
        SomeEnum dest8 = (SomeEnum)source8;
        SomeEnum dest9 = (SomeEnum)source9;
        SomeEnum dest10 = (SomeEnum)source10;
        SomeEnum dest11 = (SomeEnum)source11;
    }
    
    } // namespace StatementsPorting