Search code examples
c++user-interfacestructricheditc++builder-5

Iterate Over Struct; Easily Display Struct Fields And Values In a RichEdit Box


Is there an easier way to display the struct fields and their corresponding values in RichEdit control?

This is what I am doing now:

AnsiString s;

s = IntToStr(wfc.fontColor);
RichEdit1->Lines->Append(s);

etc...

Is there an easier way than having to individually call each one? I want to read a binary file and then display the corresponding structure in a RichEdit control for a small utility I am building and have found no other way. I know how to read binary files and read the values into the struct already.


Solution

  • BOOST_FUSION_ADAPT_STRUCT seems to fit well here. For example:

    // Your existing struct
    struct Foo
    {
        int i;
        bool j;
        char k[100];
    };
    
    // Generate an adapter allowing to view "Foo" as a Boost.Fusion sequence
    BOOST_FUSION_ADAPT_STRUCT(
        Foo,
        (int, i)
        (bool, j)
        (char, k[100])
    )
    
    // The action we will call on each member of Foo
    struct AppendToTextBox
    {
        AppendToTextBox(RichEditControl& Ctrl) : m_Ctrl(Ctrl){}
    
        template<typename T>
        void operator()(T& t)const
        {
    
            m_Ctrl.Lines.Append(boost::lexical_cast<std::string>(t));
        }
    
        RichEditControl& m_Ctrl;
    
    };
    
    // Usage:
    void FillTextBox(Foo& F, RichEditControl& Ctrl)
    {
        boost::fusion::for_each(F, AppendToTextBox(Ctrl));
    }