Heterogeneous Containers in C
In the STL container classification, some requirements remain unmet, namely variable size and heterogeneous (data of different types). It's reasonable to ask if C provides any solutions for this use case.
Typically, C containers are designed to hold objects of a single type, but you can utilize pointers or boost::any to accommodate different types:
Using Pointers:
You can store a container of pointers to the base type, allowing you to hold objects derived from that type:
<code class="cpp">std::vector<MyBaseType*>;</code>
Using boost::any:
Boost provides boost::any, which allows you to store objects of any type safely:
<code class="cpp">using boost::any_cast; typedef std::list<boost::any> many;</code>
You can then use any_cast to cast the objects to the desired types.
Using boost::variant:
Boost::variant is another option that allows you to specify a set of allowed types:
<code class="cpp">std::vector<boost::variant<unsigned, std::string>>;</code>
However, it's important to note that boost::any and boost::variant have some performance and memory overhead compared to standard STL containers.
The above is the detailed content of Can C Containers Store Data of Different Types?. For more information, please follow other related articles on the PHP Chinese website!