[Solved] C++ Structure with unknown data types


What you are looking for is a tagged union also called a variant. It allows you to store multiple data types at the same location just like a regular union but includes an additional but separate data member that indicates it’s type. The C++ Standard Library does not include variants but they are easy enough to implement.

Once you have a variant you can apply it to your example like below.

myTable.attributesNames[0] = "Name";
myTable.attributesNames[1] = "Age";

// I recommend using std::vector here instead of using new/delete yourself
attributes = new Variant*[2]; // 2 attributes
attributes[0] = new Variant("player name");
attributes[1] = new Variant(player_age);

The following example shows how the variant might be implemented.

struct Variant
{
    enum Type
    {
        INT,
        STRINGPTR
    };

    Type    type_;
    union
    {
        int         int_;
        const char* stringptr_;
    }       data_;

    explicit Variant(int data) : type_(INT)
    {
        data_.int_ = data;
    }

    explicit Variant(const char *data) : type_(STRINGPTR)
    {
        data_.stringptr_ = data;
    }

    Type getType() const { return type_; }
    int getIntValue() const
    {
        if(type_ != INT)
            throw std::runtime_error("Variant is not an int");
        return data_.int_;
    }

    const char *getStringPtr() const
    {
        if(type_ != STRINGPTR)
            throw std::runtime_error("Variane is not a string");
        return data_.stringptr_;
    }
};

int main()
{
    Variant intval(1);
    Variant stringval("hello");

    std::cout << intval.getIntValue() << std::endl;
    std::cout << stringval.getStringPtr() << std::endl;
}

1

solved C++ Structure with unknown data types