0

有趣的是,假设我有以下课程:

class Data
{
public:
    template<class T>
    std::vector<T> getData(std::string& dataName);
private:
    ...
}:

所以这个类存储了一组任意类型的向量。每个向量都有一个名称,我在检索它时知道它的类型。我可以使用什么容器在 Data 类中存储这些数据?一个std::vector<std::pair<std::string,std::vector<T>>>

更新

我还需要遍历这个类,并且这些项目必须与我添加它们的顺序相同。

例如,我可能有:

ownerNames: std::vector<std::string>;
ipAddress: std::vector<char>;

在我的店里。所以当我迭代时,我需要按这个顺序。

4

3 回答 3

3

如果您在检索时知道类型,请使用boost::any

struct Data
{
    std::map<std::string, boost::any> store;

    template <typename T>
    std::vector<T> & get(std::string const & s)
    {
        boost::any & a = store.find(s)->second;       // check existence!
        return boost::any_cast<std::vector<T> &>(a);  // try/catch bad cast!
    }

    template <typename T>
    bool put(std::string const & s, std::vector<T> v)
    {
        return store.emplace(s, std::move(v)).second;
    }
};

用法:

void f(Data & d)
{
    try
    {
        auto & v = d.get<int>("MyNumbers");
    }
    catch (boost::bad_any_cast const & e)
    {
        std::cout << "'MyNumbers' is not an int-vector.\n";
    }
}
于 2012-09-10T15:16:10.023 回答
3

我想你想要boost::any

typedef std::vector<boost::any> any_vector;

std::map<std::string, any_vector> data;
于 2012-09-10T15:16:12.007 回答
-1

好的,根据最新的评论,我建议这样的课程:-

class Server
{
public:
  const IPAddress GetIPAddress ();
  vector <std::string> &GetOwners ();
};

whereIPAddress是一个帮助类,用于存储 IP 地址并以各种方式(四个字符、字符串、int 等)访问它。

我真的不会尝试对两个不同的数据集合(IP 地址、所有者名称)强制使用相同的访问方式。

于 2012-09-10T15:45:23.943 回答