任何类型的矢量从给定的结构

时间:2013-12-03 21:45:17

标签: c++ struct

有没有办法创建任何类型给定结构的向量?

struct STUDENCI
{
    int indeks;
    string imie;
    string nazwisko;
};

struct PRZEDMIOTY
{
    int id;
    string nazwa;   
    int semestr;    
};

struct SALE
{
    string nazwa;
    int rozmiar;    
    bool projektor;
    double powierzchnia;
};

    vector<ANY TYPE FROM STUDENCI, PRZEDMIOTY, SALE> TAB[3];

2 个答案:

答案 0 :(得分:3)

您可以使用boost(www.boost.org)的变体库:

std::vector<boost::variant<STUDENCI, PRZEDMIOTY, SALE> > v;

E.g。的 Live on Coliru

#include <boost/variant.hpp>
#include <iostream>
#include <string>
#include <vector>

using std::string;

struct STUDENCI
{
    int indeks;
    string imie;
    string nazwisko;
    friend std::ostream& operator << (std::ostream& os, STUDENCI const& v) {
        return os << "STUDENCI { " << v.indeks << ", " << v.imie << ", " << v.nazwisko << " }";
    }
};

struct PRZEDMIOTY
{
    int id;
    string nazwa;   
    int semestr;    
    friend std::ostream& operator << (std::ostream& os, PRZEDMIOTY const& v) {
        return os << "PRZEDMIOTY { " << v.id << ", " << v.nazwa << ", " << v.semestr << " }";
    }
};

struct SALE
{
    string nazwa;
    int rozmiar;    
    bool projektor;
    double powierzchnia;
    friend std::ostream& operator << (std::ostream& os, SALE const& v) {
        return os << "SALE { " << v.nazwa << ", " << v.rozmiar << ", " 
                  << std::boolalpha << v.projektor << ", " << v.powierzchnia << " }";
    }
};

typedef std::vector<boost::variant<STUDENCI, PRZEDMIOTY, SALE> > Vector;

int main()
{
    Vector v;
    v.push_back(STUDENCI { 1, "imie", "nazwisko" });
    v.push_back(PRZEDMIOTY { 1, "eng101", 3 });
    v.push_back(SALE { "auditorium", 42, true, 250 });

    for (auto& element: v)
        std::cout << element << "\n";
}

打印

STUDENCI { 1, imie, nazwisko }
PRZEDMIOTY { 1, eng101, 3 }
SALE { auditorium, 42, true, 250 }

答案 1 :(得分:1)

这就是工会的用途,请参阅参考资料以获取有关该主题的更多信息:
Union declaration